답변:
" :read
"를 사용하면 Vim은 항상 새로운 줄에 출력을 삽입합니다. 해결책은 불행히도 간단하지 않습니다.
삽입 모드에있을 때을 누르고 ControlR입력 하여 현재 커서 위치에 명령 출력을 삽입 할 수 있습니다 =system('command')
Enter. 불행히도, 명령의 출력에 삽입 될 마지막 줄 바꿈 (대부분의 경우)이 있으면 줄이 끊어집니다.
substitute()
후행 줄 바꿈을 제거 하는 호출을 추가하여 해결할 수 는 있지만 명령을 직접 입력하는 것보다 더 문제가됩니다.
궁극적 인 솔루션은 일종의 매핑을 생성하는 것이지만 Vim이 "type ahead"라고 부르는 것을 처리하는 방식으로 인해 더욱 복잡해집니다. 당신이 할 수있는 동안 :
:nmap \e i<c-r>=substitute(system('date'),'[\r\n]*$','','')<cr><esc>
매핑에서 명령이 "하드 와이어드"인 경우 다음과 같은 작업을 수행 할 수 없습니다.
:nmap \e i<c-r>=substitute(system(input('Command: ')),'[\r\n]*$','','')<cr><esc>
Vim은 혼란스럽고 삐 소리를 내며 삽입 모드로 들어가기 때문에 사용자에게 명령을 실행하라는 메시지를 표시하려고합니다.
따라서 명령을 먼저 실행하라는 메시지를 표시하고 변수에 저장 한 다음 처리 된 출력을 삽입해야합니다. 이 시점에서 매핑 자체가 관리하기 어려워지지 않도록 도우미 함수가 필요할 수 있으므로 다음과 같이 끝납니다.
function InlineCommand()
let l:cmd = input('Command: ')
let l:output = system(l:cmd)
let l:output = substitute(l:output, '[\r\n]*$', '', '')
execute 'normal i' . l:output
endfunction
nmap <silent> \e :call InlineCommand()<CR>
nmap
일반 모드에서 입력 할 때만 실행되는 매핑 을 만듭니다.
덧붙여서, 날짜 또는 현재 작업 디렉토리 만 삽입하고 싶을 때, 내가 준 초기 답변이 가능합니다. 그냥 모드와 유형 삽입 입력 ControlR=strftime('%c')
Enter또는 ControlR=getcwd()
Enter.
현재 줄에서 원한다면 그냥 시도하지만 줄의 오래된 내용이 지워집니다.
:.!date
정확한 커서 위치를 원하면 다음을 수행 할 수 있습니다.
:let a=system("date") | let b=substitute(a,"[\r\n]*$","","g") | exec 'normal i'.b
간단히 말해 : ^ @ (널 문자)를 제거하려는 원인을 대체해야하며 .s / \ % x00 // g로 바꿀 수도 있습니다. 파이프가 적은 짧은 버전입니다.
:exec 'normal i'.substitute(system("date"),"[\n]*$","","")
같은 줄에서 여러 지점으로 바꾸려면 태그를 설정할 수도 있습니다.
이 줄 1을 감안할 때 :
1 Date: <datehere> and also <datehere>
실행 :
:let a=system("date") | exec ".s/<datehere>/".a."/g" | .s/\%x00//g
교체 후 :
1 Date: jue ago 9 02:34:52 ART 2012 and also jue ago 9 02:34:52 ART 2012
Vim 7.2에서 테스트
.vimrc에 이런 종류의 것을 추가 할 수 있습니다 :
" Insert the date in YYYY-MM-DD format inline just before cursor position (normal mode)
nnoremap <Leader>di me:r !date +\%F<CR>A <Esc>0D`ePJx
me
현재 위치를 표시합니다.:r !date +\%F<CR>
YYYY-MM-DD 형식으로 다음 줄에 그림을 그리 듯 날짜 (당신은 각각의 탈출, 그러나 당신이 좋아 변경할 수 %
와를 \
).A <Esc>
날짜 출력의 끝에 공백을 추가합니다.0D
날짜를 삭제하고 `e
표시된 위치로 돌아가서 PJx
커서 앞에 날짜를 넣고 행을 결합하여 (아래 빈 항목을 제거) 후행 공백을 제거합니다. 적합하다고 생각되면 매핑을 수정하십시오.삽입 모드에서 수행하려면 오늘 https://vimways.org/2018/the-mapping-business/ 에서이 보석을 읽으십시오.
inoremap <C-g><C-t> <C-r>=strftime("%F")<CR>
필요에 따라 날짜 출력을 수정할 수 있습니다 ( man date
도움이 될 수 있습니다).
일반 모드 (이스케이프 / 경고음 모드)에서 붙여 넣기
:exec 'normal i'.system("date \| tr '\n' ' '")
현재 위치에 날짜를 삽입합니다. 해당 줄을 캐리지 리턴으로 복사하면 Shift + Insert가 DateTime-Here 명령이됩니다.
또한 F12를 명령에 바인딩 할 수 있습니다.
:inoremap <F12> <C-r>=system("date \| tr '\n' ' '")<CR>
삽입 모드가 활성화되어있는 동안 기능 키 -12를 사용하여 날짜를 삽입 할 수 있습니다. 나는 사용한다
:inoremap DHRE <C-r>=system("date \| tr '\n' ' '")<CR>
(붙여 넣기 ADHERE가 트리거 된 것을 발견 한 후 DHERE에서 변경했습니다) 이미 다른 것들에 F12를 사용하고 있기 때문입니다.
나는 사용한다
grep -iE "dhere" /usr/share/dict/words
기존 단어와의 명백한 충돌을 확인하려면 사용하기가 비교적 안전하다는 것을 나타냅니다.
:inoremap PWD <C-r>=system("pwd \| tr '\n' ' '")<CR>
(특정 문서를 작성하지 않는 한)