vim 명령의 결과를 쉘에 출력하는 방법


11

쉘 ( bash)에 있고 출력을보고 :scriptnames싶지만 vim을 시작하고 싶지 않거나 다른 파일에 에코하고 싶습니다.

그래서 나는 실행

vim +scriptnames

다음은 모든 스크립트를 보여 주지만 어떻게 쉘의 표준 출력에 에코합니까?

답변:


10

일반적으로 Vim이 대체 화면으로 전환되어 작동하기 때문에 발생합니다. 종료하면 Vim이 다시 전환되므로 Vim 세션에서 남은 것이 보이지 않지만 Vim을 시작하기 전에 명령 결과가 실행됩니다.

이 기능은 (링크) 에서 설명됩니다:h xterm-screens

따라서 기본적으로 원하지 않기 때문에 비활성화하고 싶습니다. 당신은 설정하여이를 수행 할 수 있습니다 :set t_ti= t_te=비우이 수행 터미널 코드를.

모두 합치면 다음과 같이 Vim을 시작하고 싶을 것입니다.

vim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!'

'more'적중 프롬프트가 표시되지 않도록 옵션을 재설정하고 있습니다.


1
이것은 굉장합니다, 정말 고마워요! 나는 이것이 가능하다는 것을 실제로 의심했다.
hgiesel

이를 통해 VimL를 stdout (특히 masochistic)에 쓰도록함으로써 본격적인 시스템 스크립팅 언어로 사용할 수 있습니까?
shadowtalker

1
이것의 한 가지 문제는 터미널을 스크롤 할 수 없다는 것입니다. (텍스트가 터미널 높이보다 길면 상단을 볼 수 없습니다) vim을 연 다음 종료하면 텍스트도 사라집니다.
FDinoff

@FDinoff 그것이 호출기들이 좋아 less하는 것입니다. 그냥 이렇게 덜 파이프 vim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!' | less. 처음에는 레이아웃이 망가 졌을 수도 있지만 (내 터미널에 있음) <CL>을 누르면 모든 것이 멋지고 멋집니다.
hgiesel

실행할 때 출력이 표시되지 않고 vim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!'"빠른 플래시"만 있고 명령이 코드 0으로 종료되고 출력이 없습니다. 뭔가 빠졌습니까?
TrungDQ

3

:redir명령을 사용 하여 vim 명령의 결과를 파일로 리디렉션 할 수도 있습니다

예를 들어

vim -c "redir! > vimout | scriptnames | redir END | q"

이것은 출력을 scriptnames"vimout"파일로 리디렉션합니다


1

Christian Brabandt이 제공 한 답변에 감사하지만 더 나은 대답은 다른 -c 명령을 사용하여 quit 명령을 분리하는 것입니다.

vim -c ':set t_ti= t_te= nomore' -c 'scriptnames' -c 'q!' 

이 방법을 사용하면 여러 가지 다른 명령을 함께 묶은 다음 최종 'q!'를 사용할 수 있습니다. vim을 종료합니다.


0

vim을 수동으로 시작한 것처럼 완전히로드해야하는 상황에서는 다음과 같이 작동합니다.

vim -c "autocmd! CursorHold * <commands to run>"

예를 들어, 출력을 :map셸에서 파일 로 리디렉션하고 싶었지만 vim-airline 이 해당 탭을 표시 한 후에 만 ​​생성 되는 매핑을 캡처하려고했습니다 (모든 버퍼 이름이 열린 상태로 표시됨). 이것은 비동기 적 -c으로 파일에 대한 리디렉션을 실행하는 것이 매핑을 할 시간을주지 못했습니다. 더 좋은 방법이있을 수 있지만, 특히 이미 (0.1 초)로 updatetime설정되어 이벤트가 발생할 100때까지 걸리는 시간에 영향을 미칩니다 CursorHold. 기본적으로 vim은 4 초로 설정합니다.

vim -c "autocmd! CursorHold * set nomore | redir! > mapNew | map | redir END | q"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.