같은 줄에 여러 명령


188

Vim에서 같은 줄에 여러 명령을 실행할 수있는 것을 찾으려고 노력했습니다. 세미콜론을 사용하여 * nix 시스템 또는 &Windows에서 명령을 구분하는 것과 비슷합니다 . 이것을 할 수있는 방법이 있습니까?


2
와우 나는 당신의 질문 (내가 한)에서 vim에 대해 배우려고 노력했지만 Unix 쉘 명령을 분리 하는 ;대신 사용할 수 있다는 것을 알았 &&습니다!

8
@ebyrob 나는 그것을 노트에 중요 느끼는 &&당신이 그렇다면 쉘 명령에서 '부울 및'입니다 command1 && command2, command2경우에만 실행됩니다 command1성공적으로 실행. 와 ;방금 수동으로 줄의 끝을 지정하고 새로운 하나를 시작하고 있습니다. 쉘 스크립트에서 각 명령을 다른 줄에 쓰는 것과 같습니다.
Will

... 및 command1 || command2, command2는 command1이 실패한 경우에만 실행됩니다. 컴퓨터 논리에서 || &&는 비트 단위이며 "&&"는 command1과 command2를 모두 평가해야 함을 암시하더라도 cmd2가 리턴하는 내용에 관계없이 command1이 실패하면 command2를 평가할 필요가 없습니다. 비슷하게, command1 = true 인 경우, OR 평가에서 명령 2에 대한 이유가 없습니다. 그 시점에서 이미 2이므로 1 || 0이 1이므로 1이므로 0이므로 1입니다. 0, 0 || 1 (여전히 1)이
필요함

단락 / 단락 평가로 알려진 @osirisgothra.
말하기 코드

답변:


241

|에서이를 수행 할 수 있습니다. 에서:help :bar

'|'명령을 분리하는 데 사용할 수 있으므로 한 줄에 여러 명령을 제공 할 수 있습니다. '|'인수 에 사용하려면 앞에을 추가하십시오 '\'.

예:

:echo "hello" | echo "goodbye"

산출:

hello
goodbye

NB : 당신은 당신이 찾을 수 있습니다 ~/.vimrc매핑을 지원하지 않습니다 |, 또는 \|. 이 경우 <bar>대신 사용하십시오.


8
작동하지 않는 몇 가지 명령을 조심하십시오 |!
너무 많은 PHP

31
map진술 에서 여러 명령을 사용하고 싶을 때 (그리고 당신은 믿습니다),을 확인하십시오 :help map_bar.
Bill Odom

9
사실입니다. 몇 달 전에 수퍼 유저에게 질문했습니다. 내 매핑에 .vimrc이스케이프 된 막대 ( \|)를 지원하지 않습니다 . 나는 실제로 타이핑해야한다는 것을 배웠다 <bar>.
michaelmichael

작업 솔루션에 감사드립니다! :help bar그러나 motion.txt를 표시하고 여러 명령에 대해서는 아무것도 표시하지 않습니다.
geekQ

1
@geekQ는:help <bar>
Sri Kadimisetty

92

<CR>명령 사이 및 이후에 (캐리지 리턴 / Enter)를 넣습니다 . 예를 들면 다음과 같습니다.

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

다음과 같은 |이유로 사용하지 마십시오 :

  • |이후에 사용하면 일부 명령에 문제가 있습니다.

  • | 구성 파일에서 일관되게 작동하지 않습니다. :help map_bar


42

명령을 실행하는 함수를 정의 할 수 있습니다.

function Func()
     :command
     :command2 
endfunction

그리고 이것을 vimrc와 같은 곳에 두십시오. 로 기능을 실행하십시오.

exec Func()

1
깨끗한 용액. 두 개 이상의 긴 명령에 확실히 유용합니다.
elimirks

1
try / catch로 오류를 처리하는 기능에도 매우 유용합니다.
Immanuel Weihnachten

2
더 많은 것을 의미 하기 :call Func()때문에 사용 :execute Func()하는 것이 더 일반적 입니다. 함수의 반환 값을 명령으로 수행하는 것을 의미합니다. 여기에 설명 된 함수에는 일반적으로로 시작하는 명령이 :return없으므로 반환 값은 숫자 0입니다. 이를 명령으로 수행하면 커서가 현재 버퍼의 첫 번째 행으로 이동합니다.
minopret


16

나는 항상 + , + ^J를 눌러 여러 명령을 분리하는 데 사용 했습니다 .CtrlvCtrlj


이것은 실제로 작동하는 유일한 솔루션 인 것 같습니다. 문자열로 사용하려면 누구를 지정합니까?
DerWeh

^J문자열을 종료하는 NULL 문자를 삽입하므로 문자열에서 명령 구분 기호로 사용할 수 없습니다 . 그러나 <CR> = "\ n"을 사용할 수 있습니다.
Tinmarino

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

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

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

12

이것은 체인에서 누군가가 대체를 시도하는 데 도움이 될 수 있다고 생각했습니다.

A로부터 코멘트

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

e문자열을 찾을 수 없을 때 플래그를 사용하여 오류를 무시할 수 있습니다 .


2

새 파일을 작성하고 명령을 작성할 수 있습니다. 그런 다음 :so %소스 현재 파일을 의미합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.