예를 들어 :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"))
날짜 앞에 공백을 삽입할지 여부에 따라 다릅니다.