Vim에서 명령을 통해 시각적 선택을 필터링하고 싶습니다.전체 라인이 아닌 빔 선택 만 시각적 선택
라인
this is a test
에 a test
을 선택하고
:'<,'>!echo "the result"
을 입력은
the result
가 발생합니다 : 내가 아는 방법은 항상 시각적 인 선택 범위가 확장되는 동안 전체 라인 필터
하지만 원하는 :
this is the result
Vim에서 명령을 통해 시각적 선택을 필터링하고 싶습니다.전체 라인이 아닌 빔 선택 만 시각적 선택
라인
this is a test
에 a test
을 선택하고
:'<,'>!echo "the result"
을 입력은
the result
가 발생합니다 : 내가 아는 방법은 항상 시각적 인 선택 범위가 확장되는 동안 전체 라인 필터
하지만 원하는 :
this is the result
는 !
라인 방식 필터링 명령의 동작을 준수 다음과 같은 매핑을 고려 (:helpg \*!\*
및 :help v_!
참조).
nnoremap <silent> <leader>! :set opfunc=ProgramFilter<cr>[email protected]
vnoremap <silent> <leader>! :<c-u>call ProgramFilter(visualmode(), 1)<cr>
function! ProgramFilter(vt, ...)
let [qr, qt] = [getreg('"'), getregtype('"')]
let [oai, ocin, osi, oinde] = [&ai, &cin, &si, &inde]
setl noai nocin nosi inde=
let [sm, em] = ['[<'[a:0], ']>'[a:0]]
exe 'norm!`' . sm . a:vt . '`' . em . 'x'
call inputsave()
let cmd = input('!')
call inputrestore()
let out = system(cmd, @")
let out = substitute(out, '\n$', '', '')
exe "norm!i\<c-r>=out\r"
let [&ai, &cin, &si, &inde] = [oai, ocin, osi, oinde]
call setreg('"', qr, qt)
endfunction
」의
아주 좋습니다! 미안하지만 내 질문이 너무 정확하지 않았다. 실제로 나는 둘 다하고 싶은 가장 일반적인 경우를 목표로했습니다 : 1) 시각적 선택을 명령에 전달하십시오. 2) 짧은 명령을 사용하여 vim에서이 명령을 지정하십시오. 즉 vim 명령은 예제에서 'base64 --decode'를 인수로 사용해야합니다. – highsciguy
다른 말로하면 필터 명령과 동일한 기능을 효과적으로 수행해야합니다! 완전한 선택이 아닌 시각적 선택만을위한 것입니다. – highsciguy
@ user429540 : 이제 알겠습니다. 해당 필터링 명령을 구현하려는 시도로 작성된 매핑을 나열한 업데이트 된 답변을 살펴보십시오. –
당신은 비주얼 영역 내에서 일치하도록 \%V
를 사용할 수 있습니다
:'<,'>s/\%V.*\%V/\=system('echo -n "the result"')
고마워,이 작품은 약간 길지만. 어떤 vmap lookk이 쉘 명령을 매개 변수로 사용합니까? – highsciguy
.. 물론 내 예제에서 명령은 일반적으로 할 수있는 시각적 선택에 의존하지 않습니다. 그렇다면 어떻게 시각적 선택을 명령에 인수로 전달할 수 있습니까? – highsciguy
가능한 복제 ([VIM에서 선택에서 '베이스 64 --decode'를 실행] http://stackoverflow.com/questions/7845671/executing-base64-decode-on-a-selection-in -정력)". –