Vim의 외부 명령에 대한 파이프 버퍼


94

저는 Vim 초보자입니다. 현재 버퍼의 내용을 외부 명령의 stdin으로 보내고 싶습니다 (메일이라고 말할 수 있음). 마지막 목적은 현재 Vim 버퍼에서 이메일을 빠르게 보내는 단축키를 설정하는 것입니다. 이것은 사소한 일이라고 생각하지만 Vim 버퍼를 외부 명령으로 보내는 방법을 찾을 수 없습니다. 미리 감사드립니다.


선택한 텍스트 STDIN를 셸 명령 으로 제공하기위한 관련 질문 : Pipe to shell 및 정보 라인에서 출력 수신선택한 원본 텍스트를 출력으로
바꾸기

답변:


135

를 사용 :w !cmd하여 외부 명령의 표준 입력에 현재 버퍼를 쓸 수 있습니다 . 에서 :help :w_c:

: [범위] w [라이트] [++ opt]! {cmd}

표준 입력 {cmd}으로 [range]줄을 사용하여 실행합니다 (앞의 공백에 유의하십시오 '!'). {cmd}와 같이 실행 ":!{cmd}"되며 any '!'는 이전 명령으로 대체됩니다 |:!|.

관련 명령은 :%!cmd동일한 작업을 수행 한 다음 현재 버퍼를 명령의 출력으로 대체하는 것입니다. 따라서 :%!sort외부 정렬 명령을 호출하여 현재 버퍼를 제자리에 정렬합니다.


6
이것은 다음과 같은 json 형식에 유용합니다. :'<,'>!python -mjson.tool또는:%!python -mjson.tool
TrinitronX

1
형식화의 :%!gofmt경우 마지막을 사용 하지 않고 %사용하면 저장된 버전이 사용됩니다 (현재 버퍼와 다를 수 있음).
thomasrutter

성공한 경우에만 현재 버퍼를 명령 출력으로 대체하는 방법이 있습니까? 명령이 0이 아닌 값을 반환하면 버퍼를 바꾸지 않습니까?
thomasrutter

버퍼가 아닌 의도 된 출력의 오류 메시지로 대체 @thomasrutter 경우, 당신이 할 수있는 단지를 눌러 u실행 취소
törzsmókus

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