답변:
:redir
출력을 변수, 레지스터 또는 파일로 리디렉션하는 데 사용할 수 있습니다 . 명명되지 않은 레지스터로 리디렉션하는 예 :
:redir @">|silent scriptnames|redir END|enew|put
또는 Tim Pope의 scriptease.vim 은 빠른 수정 목록 및로 :Scriptnames
로드 :scriptnames
되는 명령을 제공합니다 :copen
.
많은 명령을 리디렉션하는 것을 발견하면이를 명령으로 마무리 할 수 있습니다.
command! -nargs=+ -complete=command Redir let s:reg = @@ | redir @"> | silent execute <q-args> | redir END | new | pu | 1,2d_ | let @@ = s:reg
이제 :Redir
명령을 사용하여 출력을 새 버퍼로 리디렉션 할 수 있습니다 . 예를 들어 :Redir scriptnames
또는 :Redir ls
.
Vim 8은 새로운 execute()
기능 과 함께 제공됩니다 . ex 명령 출력을 캡처 execute()
하는 대신이 기능을 사용할 수 있습니다 :redir
.
:enew|pu=execute('scriptnames')
자세한 내용은 다음을 참조하십시오.
:h :redir
:h :silent
:h :scriptnames
:h :enew
:h :put
:h execute()
:redir END
Vim에게 메시지 리디렉션을 종료하도록 지시합니다. 참조:h :redir
완성도를 위해, 나는 romainl 에서 수집 ( 독점 ) 한이 멋진 기능을 제시하고 싶습니다.
" redirect the output of a Vim or external command into a scratch buffer
function! Redir(cmd)
if a:cmd =~ '^!'
execute "let output = system('" . substitute(a:cmd, '^!', '', '') . "')"
else
redir => output
execute a:cmd
redir END
endif
tabnew
setlocal nobuflisted buftype=nofile bufhidden=wipe noswapfile
call setline(1, split(output, "\n"))
put! = a:cmd
put = '----'
endfunction
command! -nargs=1 Redir silent call Redir(<f-args>)
이것은 일반 또는 시스템 명령 출력을 가져 와서 새 탭에 넣습니다. 줄을 변경 자유롭게 tabnew
에 vsplit
또는 split
등
bufferize.vim 플러그인 도 있습니다 :
:Bufferize scriptnames
기본적으로 허용 된 답변의 패키지 버전 (을 사용하여 :redir
)이며 일부에게는 더 편리 할 수 있습니다.
END
뜻입니까?