Vim에서 쉘 명령 (!)의 출력을 새로운 버퍼로 파이프


답변:


27

쉘 명령의 출력을 새로운 버퍼를 생성하는 명령으로 파이프 할 수는 없지만, 새로운 버퍼를 생성하고 Vim의 명령 행에 하나의 엔트리로 쉘 명령의 출력을 해당 버퍼로 읽을 수 있습니다. 귀하의 예제의 작동 버전은

:tabnew | r !echo <c-r>=bufname("#")<cr>

이 경우 파이프 기호는 쉘 파이프가 아닌 Vim ex 명령 사이의 구분 기호입니다. 참조

:help :tabnew
:help :r!
:help :bar

그것은 거의 정확히 내가 필요한 것입니다. 다른 방법으로 현재 버퍼의 파일 이름에 액세스 할 수 있습니다. 참고 : 원하는 최종 결과를 명확하게 설명하기 위해 질문을 업데이트했습니다.
Richie Marquez

@Richard Marquez :이 답변을 업데이트했습니다. 새 탭이 "오래된"파일 이름으로 열리므로 다음과 같이 호출 할 수 있습니다 :! echo %
akira

그러나 :r!echo버퍼를 변경 하지 않고는 아닙니다 .
Luc Hermitte

2
@ garyjohn, akira : 도움 주셔서 감사합니다. "<cr> = ..."부분으로 인해 Vim spew 오류가 발생했지만 ": tabnew | r! echo #"를 사용하여 작업 할 수있었습니다.
Richie Marquez

1
이 파일을 .vimrc의 키에 매핑하려면 | <bar> 문자
Richie Marquez

16

여기 내가하는 일이 있습니다. 위의 답변에 대한 의견에서 언급되었습니다.

:new | r ! <cmd>
:new | r ! <cmd> #   (# is replaced with filename)

예 1 :에서 모든 텍스트 파일 찾기/tmp

:new | r ! find /tmp -name '*.txt'

예제 2 : foo.txt 파일을 편집 중이며 ls -la foo.txt버퍼에서 출력 을 실행 하고 싶습니다 .

:new | r ! ls -la #

#당신에게있는 거 편집 버퍼 원래의 파일 이름으로 대체됩니다. 이것은 특별 소스 제어 명령에 특히 유용합니다.

:new | r ! hg annotate -un #

:new수평 분할을 생성합니다. :vnew대신 수직 분할을 원할 경우 및 :tabnew새 탭에 사용하십시오.


여기 에서도이 질문에 대답 할 수 있습니까? %다음 버퍼 와 함께 E499 와 함께 현재 버퍼를 사용하려고합니다 .
hhh

4
:tabnew | enew | r ! <your shell cmd>

나를 위해 작동합니다.


2

결과를 새 버퍼에 저장해야하지만 이전 현재 버퍼의 정보가 필요한 경우 다음을 사용할 수 있습니다 system().

:let res = system('echo '.expand('%'))
:tabnew
:put=res

또는 나중에 현재 버퍼 이름을 저장하십시오 .

:let bn = expand('%')
:tabnew | :r!echo <c-r>=bn<cr>

다른 답변을 참조하십시오. 이름을 변수에 저장하지 않고도 할 수 있습니다. 어쨌든 좋은 대답입니다.
akira

과연. 내가 탭을 사용하지 않을로 - 나는 확실히 '#'은이 경우에 예상되는 결과를 줄 것이다 아니었다
루크 Hermitte
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.