Görsel bir vimscript seçimini nasıl kaynaklayabilirim?


12

Benim vimrc koymak önce test etmek istiyorum vimscript birkaç satır varsa, görsel olarak seçmek, sonra onları kaynak mümkün mü?

denedim

  • görsel seçim yapın v, sonra seçim yapmak için hareketler yapın, sonra
  • :'<,'>so

Ama vim bir hata veriyor

aralığa izin verilmiyor

Ayrıca

:'<,'>w | so

verir

Kullanın! kısmi tampon yazmak

Görsel olarak seçilen vimscript'i nasıl kaynaklayabilirim?

Yanıtlar:


11

Komut satırına isabet <C-u>sonra yazın @*ve girin.

<C-u>görsel '<,'>olarak bir metin seçilirse otomatik olarak eklenen görsel aralığı siler .

:@**o anda görsel olarak seçilen her şeyi içeren kaydın içeriğini yürütür .

Seçilen / vurgulanan metin web tarayıcınızda (firefox, chrome, ...) olsa bile çalışır, *kayıt doğrudan vim'de erişmenize izin verir.


Metniniz bir vim tamponunda seçildiyse, başka bir çözüm metni adlandırılmış bir kayda, örneğin yazarak bir kayda kopyalamaktır "ay.

Ardından, komut satırına: yazın <C-r>ave girin.
Ctrl+ rsize karakterin temsil ettiği bir tür "bilgi verir (daha fazla bilgi için :h c_Ctrl-r).
Bu yeni istemde, bir kaydın adını verirseniz, içeriği komut satırına eklenir ve burada yürütmeden önce düzenleyebilirsiniz.


Ayrıca, bir kayıt belirtmeden bazı metinleri kopyalarsanız, isimsiz kayıttan erişilebilir " .

Bir dosyada bir vimscript satırınız olduğunu ve onu hızlı bir şekilde kaynaklamak istediğinizi varsayalım, onu kopyalayabilir Y, ardından komut satırında: ile kaynaklayabilirsiniz :<C-r>"ve girin.

Son olarak, bu son çözümü kullanırsanız, bilmeniz gereken bir sorun vardır.
Böyle komut satırında garip karakteri görürseniz ^M, bu kadar şapka notasyonu Satırbaşı. Silmeniz gerekir, aksi takdirde muhtemelen bir hata alırsınız.

Özetle:

  1. vimscript satırınızı şununla kopyalayın: Y
  2. ile komut moduna geç :
  3. <C-r>Kayıt istemini girmek için tuşuna basın
  4. "isimsiz kaydı aramak için yazın
  5. ^Mkarakteri silmek için geri tuşuna basın
  6. ve enter tuşuna basın.

1
Tatlı! : D iyi çalışıyor - daha @*önce hiç karşılaşmamıştım , teşekkürler!
the_velour_fog

Sana yardım ettiğine sevindim. Cevabı başka bir çözüm önermek için düzenledim.
saginaw

1
güzel bir, ben : <C-r>a aslında çok iyi çalıştı kullanma hakkında öneri denedim :) Sanırım vim ^M'satır döner gibi okuyun - ve her biri kendi bireysel satır / komut olarak idam?
the_velour_fog

Bu iyi bir soru, dürüst olmak gerekirse bilmiyorum. Genellikle bu karakteri silmezsem hatalar alıyorum. Sizin için hatasız çalıştığı için memnunum. Belki de konuyla ilgili daha fazla bilgiye sahip biri bize vim'in bu tür özel karakterlere nasıl davrandığını açıklayacaktır.
saginaw

2

Aslında bunu biraz farklı yapıyorum, sadece vimrc'imde düzenlemeler yapıyorum ve her yazışımda yeniden kaynak yapıyorum. (Vimrc dosyalarının basamaklı bir setine sahibim, bu yüzden bunlardan herhangi birini değiştirmeme izin veriyor.)

if $MYVIMRC != ''
    autocmd BufWritePost    *vimrc      source $MYVIMRC
endif

2

Soruya diğer cevabımdan daha doğrudan, bunun gibi bir eşleme tanımlayabilirsiniz ( nnoremapseçim için sadece geçerli satırı yürütün; vnoremapgörsel mod aktif olduğunda):

nnoremap <F2> :execute getline(".")<CR>
vnoremap <F2> :<C-u>for line in getline("'<", "'>") \| execute line \| endfor<CR>

Her iki durumda da, "geçerli çizgi" :executed'dir, bu nedenle görsel versiyonda :executegörsel seçim yoluyla bir satır birbiri ardına giriyorsunuz .

Başka bir yanıtta belirtildiği gibi , yazıldığında <C-u>komut satırında açılan aralık belirtimini siler :. |Aksi takdirde sonu olarak yorumlanır çünkü karakterlerin çıkış gereken vnoremapkomutu.

Bu, bazı kaçış jimnastiğinden kurtulmak için bir işleve dönüştürülebilir, ancak şu anda benim için büyük bir kazanç gibi görünmüyor. Temel olarak vnoremap çoklu satırlara genişletilmiş ve callbir aralıkla [nv] eşleme moduna bağlı olarak ya da değil olarak düzenlenmiş olacaktır.


Oh, görsel mod eşleme tüm satırları yürütür, böylece blok ya da karakter bakımından satırlar içindeki başlangıç ​​ve bitiş noktalarını göz ardı eder.
dash-tom-bang
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.