Aynı satırda birden fazla komut


188

* Nix sistemlerinde veya &Windows'ta komutları ayırmak için noktalı virgül kullanmaya benzer şekilde, Vim'de aynı satırda birden fazla komut çalıştırmama izin verecek bir şey bulmaya çalışıyorum . Bunu yapmanın bir yolu var mı?


2
Vay sorudan (ki ben) vim hakkında bilgi edinmek için çalışıyordu ve ben de Unix kabuk komutları ayırmak ;yerine kullanabileceğini öğrendim &&!

8
@ebyrob &&Kabuk komutlarında 'boolean ve' olduğunu belirtmenin önemli olduğunu düşünüyorum , bu yüzden eğer varsa command1 && command2, command2sadece command1başarılı bir şekilde yürütülürse çalıştırılacaktır. ile ;sadece manuel o çizginin ucunu belirterek ve yenisini başlıyoruz. Her komutu bir kabuk betiğindeki farklı bir satıra yazmakla aynıdır.
Will

... ve komut1 || komut2, komut2 yalnızca komut1 başarısız olursa yürütülür. Çünkü bilgisayar mantığında || && bitseldir ve "&&" her iki komut1 ve komut 2'nin değerlendirileceğini ima etse de, komut1 başarısız olursa komut2'nin değerlendirilmesi gerekmez; 0) ve 0 && hala sıfır olacaktır. Benzer şekilde, komut1 = true ise, bir OR değerlendirmesinde komut 2 için bir neden yoktur, çünkü bu noktada zaten doğrudur (1), çünkü 1 || 0 1'dir ve yalnızca 0, 0 || 1 (hala 1) gerekir
osirisgothra

kısa devre / kısa devre değerlendirmesi olarak bilinen @osirisgothra.
konuşma

Yanıtlar:


241

Bir çubuk |bunu yapmanıza izin verecektir. itibaren:help :bar

'|'komutları ayırmak için kullanılabilir, böylece bir satıra birden fazla komut verebilirsiniz. Eğer '|'bir argümanda kullanmak istiyorsanız , önüne bir argüman koyun '\'.

Misal:

:echo "hello" | echo "goodbye"

Çıktı:

hello
goodbye

Not: ~/.vimrcHaritalarınızın desteklenmediğini |veya \|. Bu durumlarda, <bar>bunun yerine kullanmayı deneyin .


8
Sadece işe yaramayan birkaç komut dikkat edin |!
Çok fazla php

31
Kendinizi bir mapifadede birden fazla komut kullanmak istediğinizi bulduğunuzda (ve bana inanın), bakın :help map_bar.
Bill Odom

9
Bu doğru. Birkaç ay önce süper kullanıcıyla ilgili bu soruyu sordum. Benim .vimrckaçan bir bar (desteklemez \|eşleme için). Aslında yazmam gerektiğini öğrendim <bar>.
michaelmichael

Çalışma çözümü için teşekkürler! :help barmotion.txt dosyasını gösterir ve birden fazla komutla ilgili hiçbir şey göstermez.
geekQ

1
@geekQ olmalı:help <bar>
Sri Kadimisetty

92

<CR>(Carriage Return / Enter) komutlarını arasına ve arkasına koy . Örneğin:

map <F5> :w<CR>:!make && ./run<CR>

Kullanmayın |çünkü:

  • Bazı komutlardan |sonra kullanırsanız sorunlar var

  • | yapılandırma dosyalarında sürekli çalışmıyor, bkz. :help map_bar


42

Komutlarınızı yürüten bir işlev tanımlayabilirsiniz.

function Func()
     :command
     :command2 
endfunction

Ve bunu örneğin vimrc'nize yerleştirin. İşlevi şununla çalıştırın:

exec Func()

1
Temiz çözelti. İkiden fazla veya sadece uzun komutlar için kesinlikle kullanışlı olacaktır.
elimirks

1
Try / catch ile hataların ele alınabilmesi için de çok kullanışlıdır.
Immanuel Weihnachten

2
Kullanmak daha geleneksel :call Func()çünkü :execute Func()daha fazla şey ifade ediyor. Fonksiyonun dönüş değerini komut olarak gerçekleştirmek anlamına gelir. Burada açıklanan fonksiyon genellikle ile başlayan bir komuta sahip olmayacaktır :return, bu nedenle dönüş değeri sıfır sayısı olacaktır. Bunu bir komut olarak gerçekleştirdiğinizde imleç her zaman aklınızda olan şey değil, geçerli arabelleğin ilk satırına taşınır.
minopret


16

Her zaman + , + ^Jtuşlarına basarak birden fazla komutu ayırmak için kullandım .CtrlvCtrlj


Bu gerçekten işe yarayan tek çözüm gibi görünüyor. Bir dizede kullanmak istersem bunu kiminle belirtebilirim?
DerWeh

^JDizeyi sonlandıran NULL karakteri eklediğinden, bir dizede komut ayırıcı olarak kullanamazsınız . ancak <CR> = "\ n" kullanabilirsiniz.
Tinmarino

exe "echo 'foo' \n echo 'bar'"
Tinmarino

exe "echo 'foo'" . nr2char(0x0a) . "echo 'bar'"
Tinmarino

map aa :echo 'foo' <C-V><C-J> echo 'bar'<CR>
Tinmarino

12

Bunun bir zincirde oyuncu değişikliği yapmaya çalışan birine yardımcı olabileceğini düşündüm ve

bir yorumdan

% s/word/newword/ge | % s/word2/newword2/ge

eDize bulunamadığında hatayı yok saymak için bayrağı kullanabilirsiniz .


2

Yeni bir dosya oluşturabilir ve komutlarınızı üzerine yazabilirsiniz. Sonra :so %, kaynak geçerli dosya anlamına gelir.

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.