Vim'e yapıştırdığımda orijinal kaynak olarak oluşturulan kodu nasıl saklayabilirim?


37

Web sayfalarından bazı kodları kopyalayıp VIM'e yapıştırdığımda, aşağıdaki gibi bir merdiven stili gibi karışıklık haline geldiğini biliyorum

xxxxxx
   xxxxxx
      xxxxxx
         xxxxxxxxxx

Çok düzenli dağıldığından, bence belki .vimrcaşağıdaki gibi yanlış bir şeyler var :

set number
set nocompatible
set nowritebackup
set noswapfile
syntax on
filetype indent on
filetype plugin on
filetype on
set background=light
set autoindent
set smartindent
set tabstop=4
set shiftwidth=4
set showmatch
set guioptions=T
set fileencodings=utf-8,prc
set ruler
set incsearch
map gs :%s
set t_Co=256
:colorscheme evening
filetype plugin indent on

Genellikle VIM'de python yazıyorum. Ve yardım ederdi.


1
Teşekkürler. Bu beni yıllarca rahatsız etti ve hiç kimseye sormak istemedim. +1.
DevSolar

Yanıtlar:


50

Bunu daha önce yap:

:set paste

Ondan sonra:

:set nopaste

Gerekli değil gvim; yapıştırırken bunları otomatik olarak açar ve kapatır.
Benjamin Bannier

Bunun neden olduğu hakkında bir fikrin var mı?
Nathan Fellman

1
Sadece tahmin etmek: Düz vim sadece komut satırı ve pano hakkında "bilmiyor". Giriş karakter dizisi olarak "yapıştırmayı" alır ve otomatik girinti uygular. GUI-farkında gvim, gelen verinin panodan geldiğini "bilebilir" ve böylece amaç için otomatik bağlamayı devre dışı bırakabilir.
DevSolar

Bu doğru. Terminal, "paste" işlemini ham karakter girişi olarak kabul eder.
Ignacio Vazquez-Abrams

Bu tamamen bir vim sorunu değil - komut satırında eski DOS editörüne yapıştırarak benzer bir etki elde edebilirsiniz. Bu program Windows 7 64-bit'de eksik gibi görünüyor - muhtemelen eski 16 bitlik bir DOS uygulaması olduğundan ve onu güncellemenin zorluğuna değmediği için. Yine de, Windows XP’de, ve bunu yapıştırmak (1) karakter karakterine göre çok yavaş çalışıyor, (2) gerçek bir karışıklık yaratıyor.
Steve314,

16

http://vim.wikia.com/wiki/Toggle_auto-indenting_for_code_paste

Kod yapıştırma için otomatik girintiyi değiştir

Arka fon

Metin yapıştırmak için Vim komutlarını kullanırsanız, beklenmeyen bir şey olmaz. Sorun yalnızca başka bir uygulamadan yapıştırırken ve yalnızca Vim'in GUI sürümünü kullanmadığınızda ortaya çıkar. Vim'in bir konsol veya terminal sürümünde, başka bir uygulamadan metin yapıştırmak için standart bir prosedür yoktur. Bunun yerine, terminal klavye arabelleğine metin ekleyerek yapıştırmayı taklit edebilir, böylece Vim, metnin kullanıcı tarafından yazıldığını düşünür. Her satır bittikten sonra, Vim imleci hareket ettirebilir, böylece bir sonraki satır bir öncekiyle aynı girinti ile başlar. Ancak, bu zaten yapıştırılan metnin girintisini değiştirir.

Geçişi yapıştır

Aşağıdakini vimrc'nize koyun (istediğiniz anahtarla değiştirin):

set pastetoggle=<F2>

Başka bir uygulamadan yapıştırmak için:

  • Ekleme modunu başlat.
  • F2 tuşuna basın ('yapıştırma' seçeneği açıkken).
  • Panodan metin yapıştırmak için terminalinizi kullanın.
  • F2 tuşuna basın ('yapıştırma' seçeneğini kapalı konuma getirir).

Sonra yapıştırılan metnin varolan girintisi korunur.

Önce ekleme modunu başlatmanız gerekmez, ancak normal moddaysanız ve F2 için bir eşlemeniz varsa, bu eşleme geçerli olur ve 'pastetoggle' işlevi çalışmaz.

Bazı kişiler, durum satırında gösterilen görsel geri bildirimi, vimrc'niz için aşağıdaki alternatifi sever:

nnoremap <F2> :set invpaste paste?<CR>
set pastetoggle=<F2>
set showmode

İlk satır, F2'ye normal modda basmak, 'yapıştırma' seçeneğini tersine çevirecek ve daha sonra bu seçeneğin değerini gösterecek şekilde bir eşleme ayarlar. İkinci satır, ekleme modundayken 'yapıştırma' özelliğini açıp kapatmak için F2 tuşuna basmanıza izin verir. Üçüncü satır, 'yapıştırın' ekleme modunda açılıp açılmadığını göstermeyi sağlar.


1
Kısayol tuşu çözümü için +1. F tuşlarını zaten başka bir şeyle eşleştiren (benim gibi)
VIM'de olmayan firmalar için

mükemmel - şimdi bunu kullanıyorum
hoju 12:11

neden sadece otomatik olarak yapmak için yapıştırma tuşlarını eşleştirmiyorsunuz, <S-Insert> veya <Ctrl + V> gibi orijinal işlevleriyle birlikte? Veya birkaç saniyeden fazla giriş karakteri arabellekte bir saniyeden fazla sürede yazılırsa yapıştıran özelliği devre dışı bırakan bir işlev yazın, bu benim için bir fikir, elbette benim için neredeyse tüm anahtarlarım diğer şeylerle eşleştirildi, bu yüzden bir acı Hatta 12 tane F tuşu ve + 15 tane daha F tuşu (G tuşu) olan bir klavyem var, ve bununla birlikte, üç seviye, hala yeterli değil :) ama bu sadece benim. Tek sorun, hiçbir esc
sek'inin

2

Bu seninle dalga geçen otomatik bağdır.

set autoindent
set smartindent

Kodunuzu kesip yapıştırdığınızda bunları devre dışı bırakmayı deneyin ve tamamladığınızda tekrar etkinleştirin.


-2

Bunu başarmak için en düşük çaba .vimrc:

:set paste

Ardından kodunuzu yapıştırın.


3
Bu 'paste'seçenek hiçbir zaman kalıcı olarak ayarlanmadı. Eşlemeler ve kısaltmalar da dahil olmak üzere birçok şeyi devre dışı bırakır. Ayrıca, önceki bir cevap zaten 'paste'seçeneği kapsar .
Heptit

2
Süper Kullanıcıya Hoşgeldiniz! Bu, varolan bir cevabı çoğaltır ve yeni içerik eklemez. Gerçekten katkıda bulunacak yeni bir şeyiniz yoksa lütfen cevap yazmayın.
Toby Speight
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.