Próbowałem znaleźć coś, co pozwoli mi uruchomić wiele poleceń w tym samym wierszu w Vimie, podobnie jak używanie średników do oddzielania poleceń w systemach * nix lub &Windows. Czy jest na to sposób?
Wow, próbowałem dowiedzieć się o vimie z twojego pytania (co zrobiłem) i odkryłem, że mogę użyć ;zamiast &&rozdzielić polecenia powłoki Uniksa!
8
@ebyrob Uważam, że ważne jest, aby pamiętać, że &&jest to „boolean” i „w poleceniach powłoki”, więc jeśli tak command1 && command2, command2to wykona się tylko po command1pomyślnym wykonaniu. ze ;jesteś po prostu ręcznie określający koniec tej linii i rozpoczęcie nowego. To tak samo, jak pisanie każdego polecenia w innym wierszu w skrypcie powłoki.
Czy
... i polecenie 1 || polecenie2, polecenie2 zostanie wykonane tylko wtedy, gdy polecenie 1 nie powiedzie się. To dlatego, że w logice komputerowej || a && są bitowe, i chociaż „&&” implikuje, że zarówno polecenie1 ORAZ polecenie2 mają być ewaluowane, polecenie2 NIE musi być oceniane, jeśli polecenie1 zawiedzie, bez względu na to, jakie polecenie cmd2 zwróci, zawsze zawiedzie, ponieważ pierwsze zwróciło fałsz ( 0), a 0 i& 1 nadal będą wynosić zero. Podobnie, jeśli polecenie1 = prawda, nie ma powodu dla polecenia 2 w ocenie OR, ponieważ w tym momencie jest to już prawda (1), ponieważ 1 || 0 to 1 i tylko jeśli jest to 0, potrzebowałoby 0 || 1 (co wciąż jest 1)
osirisgothra
@osirisgothra, która jest znana jako zwarcie / ocena zwarcia.
mówiący
Odpowiedzi:
241
Pasek |pozwoli ci to zrobić. Z:help :bar
'|'można użyć do oddzielenia poleceń, dzięki czemu można wydać wiele poleceń w jednym wierszu. Jeśli chcesz użyć '|'argumentu, poprzedz go '\'.
Przykład:
:echo "hello" | echo "goodbye"
Wynik:
hello
goodbye
Uwaga: może się okazać, że ~/.vimrcnie obsługuje mapowania |, lub \|. W takich przypadkach spróbuj użyć <bar>zamiast tego.
Uważaj tylko na kilka poleceń, które nie działają |!
za dużo php
31
Jeśli zauważysz, że chcesz użyć wielu poleceń w mapinstrukcji (i uwierz mi, to zrobisz), sprawdź :help map_bar.
Bill Odom
9
To prawda. Kilka miesięcy temu zadałem to pytanie superużytkownikowi. My .vimrcnie obsługuje znaku Esc ( \|) dla mapowań. Nauczyłem się, że muszę pisać <bar>.
michaelmichael
Dzięki za działające rozwiązanie! :help barpokazuje jednak motion.txt i nic o wielu poleceniach.
geekQ
1
@geekQ powinien być:help <bar>
Sri Kadimisetty
92
Wstaw <CR>(Carriage Return / Enter) pomiędzy poleceniami i po nich. Na przykład:
map <F5> :w<CR>:!make && ./run<CR>
Nie używaj, |ponieważ:
Niektóre polecenia mają problemy, jeśli używasz |ich po nich
| nie działa konsekwentnie w plikach konfiguracyjnych, patrz :help map_bar
Czyste rozwiązanie. Na pewno przydałby się w przypadku więcej niż dwóch lub tylko długich poleceń.
elimirks
1
Bardzo przydatne również ze względu na możliwość ręcznego podawania błędów przy try / catch.
Immanuel Weihnachten
2
Jest bardziej konwencjonalny, :call Func()ponieważ :execute Func()oznacza coś więcej. Oznacza to wykonanie wartości zwracanej funkcji jako polecenia. Opisana tutaj funkcja zwykle nie ma polecenia, które zaczyna się od :return, więc jego wartością zwrotną będzie liczba zero. Wykonanie tego polecenia spowoduje przeniesienie kursora do pierwszego wiersza bieżącego bufora, co nie zawsze jest tym, o czym myślisz.
;
zamiast&&
rozdzielić polecenia powłoki Uniksa!&&
jest to „boolean” i „w poleceniach powłoki”, więc jeśli takcommand1 && command2
,command2
to wykona się tylko pocommand1
pomyślnym wykonaniu. ze;
jesteś po prostu ręcznie określający koniec tej linii i rozpoczęcie nowego. To tak samo, jak pisanie każdego polecenia w innym wierszu w skrypcie powłoki.Odpowiedzi:
Pasek
|
pozwoli ci to zrobić. Z:help :bar
Przykład:
:echo "hello" | echo "goodbye"
Wynik:
Uwaga: może się okazać, że
~/.vimrc
nie obsługuje mapowania|
, lub\|
. W takich przypadkach spróbuj użyć<bar>
zamiast tego.źródło
|
!map
instrukcji (i uwierz mi, to zrobisz), sprawdź:help map_bar
..vimrc
nie obsługuje znaku Esc (\|
) dla mapowań. Nauczyłem się, że muszę pisać<bar>
.:help bar
pokazuje jednak motion.txt i nic o wielu poleceniach.:help <bar>
Wstaw
<CR>
(Carriage Return / Enter) pomiędzy poleceniami i po nich. Na przykład:Nie używaj,
|
ponieważ:Niektóre polecenia mają problemy, jeśli używasz
|
ich po nich|
nie działa konsekwentnie w plikach konfiguracyjnych, patrz:help map_bar
źródło
Możesz zdefiniować funkcję, która wykonuje twoje polecenia.
I umieść to na przykład w swoim vimrc. Uruchom funkcję za pomocą
źródło
:call Func()
ponieważ:execute Func()
oznacza coś więcej. Oznacza to wykonanie wartości zwracanej funkcji jako polecenia. Opisana tutaj funkcja zwykle nie ma polecenia, które zaczyna się od:return
, więc jego wartością zwrotną będzie liczba zero. Wykonanie tego polecenia spowoduje przeniesienie kursora do pierwszego wiersza bieżącego bufora, co nie zawsze jest tym, o czym myślisz.Separator poleceń w vimie to
|
.źródło
Zawsze
^J
rozdzielałem wiele poleceń, naciskając Ctrl+ v, Ctrl+ j.źródło
^J
jako separatora poleceń w ciągu, ponieważ wstawia on znak NULL kończący ciąg. możesz jednak użyć <CR> = "\ n".exe "echo 'foo' \n echo 'bar'"
exe "echo 'foo'" . nr2char(0x0a) . "echo 'bar'"
map aa :echo 'foo' <C-V><C-J> echo 'bar'<CR>
Pomyślałem, że może to pomóc komuś, kto próbuje dokonać podstawień w łańcuchu, a jedno się nie powiedzie
z komentarza
Możesz użyć
e
flagi, aby zignorować błąd, gdy ciąg nie zostanie znaleziony.źródło
Możesz utworzyć nowy plik i napisać na nim swoje polecenia. Następnie
:so %
, co oznacza źródłowy plik bieżący.źródło