2012-02-20 2 views
2

내의 .vimrc에 명령을 다음 있습니다 :빔 -지도 쉘 명령

map t :!../tt <C-R><C-W> <CR><CR> 

그것은 매우 잘 작동 : 정력이 파일에서 단어를 얻고 ../t word를 실행합니다. 하지만 하나의 성가신 일은 명령어가 실행될 때 vim이 잠시 동안 쉘로 돌아온 다음 파일로 돌아 오는 것입니다. 명령 출력을 볼 필요가 없으므로이 성가신 플래시를 피할 수 있습니까?

+0

'$ ../t word'의 기능은 무엇입니까? 출력은 무엇입니까? 그것을 버퍼에 넣으시겠습니까? – romainl

+5

왜 't'를 다시 매핑합니까? 이것은 유용한 이동 명령입니다 ... – hochl

+1

그리고 나는't'에 동의합니다. – romainl

답변

0

나는 이것이 작동해야한다고 생각합니다.

map <silent> t :silent!../tt <C-R><C-W> <CR><CR> 

하지만 열려진 대 표준 출력 대 등을 위해 테스트 할 수 있도록 나는 당신의 TT 응용 프로그램이없는; 그게 정력에 문제가 있는지 나는 모른다.

+0

아니요 작동하지 않습니다. tt는 간단한 bash 스크립트입니다. 이것은 소스 코드입니다 :'#!/bin/bash' 'FILE_OF_EX = ~/tmp/to_trans' 'echo $ 1> $ FILE_OF_EX' – ghi

2

당신은 시도 할 수 있습니다

nnoremap <silent> t :<C-u>silent !../tt <C-r>=shellescape(expand('<cword>'), 1)<CR><CR><C-l> 

또는

nnoremap <silent> t :<C-u>call system('../tt '.shellescape(expand('<cword>')))<CR> 

또는

nnoremap <expr> <silent> t system('../tt '.shellescape(expand('<cword>')))[-1] 

. 몇 가지 참고 : 특별한 이유가없는 한

  1. 이 (nnore없이) map를 사용하지 마십시오. 비주얼 및 연산자 보류 모드에 대해서는이 매핑이 필요하지 않습니다 (n은 매핑을 일반 모드로 제한 함).이 매핑을 다시 매핑 할 수 없도록해야합니다.
  2. 필요하다면 가끔씩 입력 할 수있는 개수를 버리는 데는 <C-u>을 사용하십시오 (세 번째 버전은 부작용이있는 아무 작업도하지 않고 두 번째 해킹을 사용하므로 <C-u>이 필요하지 않음).
  3. 쉘 인수를 벗어나는 것을 잊지 마십시오.
  4. silent !의 버전 (silent 이후의 공간을 잊지 마세요. @David Pope의 대답이 작동하지 않는 이유입니다) 끝에 <C-l>이 있습니다. 이는 !을 사용하면 이 항상이므로 터미널에 대한 액세스를 제공하므로 명령을 실행 한 후 다시 그리기가 필요하기 때문입니다.
  5. 개행을 포함하는 인수를 추가하면 system()이있는 버전은 작동하지 않습니다. 문서화 된 버그입니다. 그렇게하지 않으려면 (expand('<cword>')은 개행을 추가하지 않습니다) 절대 안전합니다.
  6. t은 매우 유용한 동작입니다. 그것을 사용하는 법을 배우고 그것을 무언가에 다시 매핑하는 것이 낫습니다. 나는 lhs로 ,t을 제안한다.