예를 들어, :echo strftime(%c)
맨 아래에 현재 시간을 표시하지만이 시간 문자열을 텍스트에 삽입하는 방법 (커서 바로 뒤에)?
답변
당신이 사용할 수있는 표현 레지스터 "=
, 과 p
(또는 P
) 정상 모드에서 또는 <C-R>
삽입 모드에서 :
일반 모드에서 :
( <C-M>
여기서 Control+를 의미 M하거나 Enter/를 누르십시오 Return)
"=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>
답변
:r!date +\%c
보다 :help :r!
답변
이 명령은 strftime("%c")
커서가있는 곳에 오른쪽 의 출력을 삽입합니다 .
:exe ":normal i" . strftime("%c")
과
:call feedkeys("i". strftime("%c"))
원하는 것을 수행하는 다른 방법이 있습니다 (예 : Mikel의 답변 에있는 것과 같은 방법 ).
편집 : 더 나은 경우, 인서트 인서트의 경우 Chris Johnsen이 설명한대로=
레지스터를 사용하십시오.
답변
vim 명령 의 출력을 삽입하려면 ( 함수 호출 의 반환 값이 아닌 )이를 캡처해야합니다. 이 :redir
명령을 통해 vim의 표준 출력을 변수, 파일, 레지스터 또는 기타 대상으로 리디렉션 할 수 있습니다.
:redir
고통스럽고 사용하기 불편하다. 더 편리한 방식으로 기능을 캡슐화하는 함수를 작성합니다.
funct! Exec(command)
redir =>output
silent exec a:command
redir END
return output
endfunct!
이러한 함수를 선언하면 Chris Johnsen이 설명한대로 식 레지스터를 사용하여 커서 위치에 명령 출력을 삽입 할 수 있습니다. 따라서 일반 모드에서 i^R=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
과 링크는 다음을 참조 하십시오. 관련 명령.
답변
:call append(line('.'), strftime("%c"))
다음 줄에 넣으면 J
( Shift+ J)를 눌러 현재 위치에 연결할 수 있습니다.
또는 하나의 명령으로 모두 필요하면 할 수 있습니다.
:call setline(line('.'), getline(line('.')) . strftime("%c"))
또는
:call setline(line('.'), getline(line('.')) . " " . strftime("%c"))
날짜 이전에 공백을 삽입할지 여부에 따라
답변
공백을 사용하고 들여 쓰기를 증가시키는 문제를 피하기 위해 @intuited 답변 개선 :
"Examples:
":call Exec('buffers')
"This will include the output of :buffers into the current buffer.
"
"Also try:
":call Exec('ls')
":call Exec('autocmd')
"
funct! Exec(command)
redir =>output
silent exec a:command
redir END
let @o = output
execute "put o"
return ''
endfunct!
:call Exec('command')
일반 모드에서 파일의 현재 위치에 삽입하면 됩니다. 주석 에서 언급했듯이 문자열 =Exec('command')
을 Exec(..)
반환하는 원래 (삽입 모드) Ctrl + R 접근 방식은 을 사용하여 부분적으로 수정할 수 set paste
있지만 set nopaste
어디에나 넣을 수있는 기회는 제공하지 않습니다 .
let @o = output
구문 레지스터 설정 o
변수의 내용을 output
여기에 설명 된 바와 같이 : https://stackoverflow.com/a/22738310/1143274
return ''
의 기본 반환 값이 있도록 행은 0
버퍼에 삽입되지 않습니다.
답변
이것이 내가하는 방법입니다. 사용하기 때문에 커서 바로 뒤에 놓습니다 p
.
" save previous yank
let reg_save = @@
" save your text to the '@' register
let @@ = strftime('%c')
" paste it after the cursor
exec "normal! p"
" restore previous yank
let @@ = reg_save