vim에서 명령 결과를 텍스트에 삽입하는 방법은 무엇입니까?

vim에서 명령 결과를 텍스트에 삽입하는 방법은 무엇입니까?

예를 들어 :echo strftime(%c)현재 시간이 하단에 표시되는데 이 시간 문자열을 텍스트(커서 바로 뒤)에 어떻게 삽입할 수 있나요?

답변1

:r!date +\%c

바라보다:help :r!

이는 vim 명령이 아닌 외부 명령(셸 내에서 실행됨)에 대한 것입니다.

답변2

당신은 그것을 사용할 수 있습니다표현식 레지스터 "=,,그리고p(또는 P)일반 모드 또는<C-R>삽입 모드에서:

일반 모드에서: (
여기서는 +를 <C-M>의미 하거나 /를 직접 누르십시오 )ControlMEnterReturn

"=strftime('%c')<C-M>p

삽입 모드에서: (
위와 동일 <C-M>, +를 <C-R>의미 )ControlR

<C-R>=strftime('%c')<C-M>

동일한 표현식의 결과 를 여러 번 삽입 하려면 다음의 키에 매핑해야 할 수도 있습니다.vimrc .
<C-M><C-R>

:nmap <F2> "=strftime('%c')<C-M>p
:imap <F2> <C-R>=strftime('%c')<C-M>

답변3

vim의 출력을 삽입하려는 경우주문하다(쉘의 stdout처럼, 대신에함수 호출의 반환 값또는표현하다), 캡처해야 합니다. 이는 :redir변수, 파일, 레지스터 또는 기타 대상에 해당하는 vim의 표준 출력을 리디렉션할 수 있는 명령을 사용하여 수행됩니다.

:redir사용하기가 약간 불편합니다. 더 편리한 방법으로 기능을 캡슐화하는 함수를 작성하겠습니다.

funct! Exec(command)
    redir =>output
    silent exec a:command
    redir END
    return output
endfunct!

이러한 함수가 선언되면 표현식 레지스터(Chris Johnsen의 설명대로)를 사용하여 명령의 출력을 커서 위치에 삽입할 수 있습니다. 따라서 일반 모드에서는 클릭하여 :put =Exec('ls')vim의 현재 버퍼 목록을 삽입합니다.

명령은 함수 네임스페이스에서 실행되므로 전역 변수를 사용하는 경우 앞에 를 붙여야 합니다 g:. 또한 Exec()위에서 언급한 것처럼 한 줄 출력에도 종료 줄 바꿈이 추가됩니다. substitute()이를 방지하려면 함수 호출을 추가해야 할 수도 있습니다 .

또한보십시오https://stackoverflow.com/questions/2573021/vim-how-to-redirect-ex-command-output-into-current-buffer-or-file/2573054#2573054관련 명령에 대한 자세한 내용 redir및 링크를 확인하세요.

답변4

:call append(line('.'), strftime("%c"))

다음 줄에 놓고 J( Shift+ J)를 누르면 현재 위치로 연결됩니다.

또는 하나의 명령으로 모든 작업을 수행해야 하는 경우 다음을 수행할 수 있습니다.

:call setline(line('.'), getline(line('.')) . strftime("%c"))

또는

:call setline(line('.'), getline(line('.')) . " " . strftime("%c"))

날짜 앞에 공백을 삽입할지 여부에 따라 다릅니다.

관련 정보