현재 명령줄을 잃지 않고 한 명령 유형 모드에서 다른 명령 유형 모드로 쉽게 전환할 수 있는 방법이 있습니까?
내 ~/.vimrc
파일 에서 <space>
및 문자를 다음으로 <c-space>
다시 매핑 합니다.
- N, V, O => :
- 나 =>:
- : => / => ?
위 동작을 수행하는 코드는 다음과 같습니다.
function! s:ModMapSpaceChar()
noremap <unique> <space> :
map <unique> <nul> <c-space>
map! <unique> <nul> <c-space>
noremap <unique> <c-space> /
inoremap <unique> <c-space> <c-o>:
cnoremap <unique> <c-space> <c-\>eg:ToggleCmdTypes()<cr><c-c>@"
let g:CmdTypes={':' : '/', '/' : '?', '?': ':'}
function! g:ToggleCmdTypes()
let a=getcmdtype()
let b=get(g:CmdTypes, a, a)
let c=getcmdline()
let @"=b . c
return ''
endfunction
endfunction
call s:ModMapSpaceChar()
내 방법에 대해 나를 괴롭히는 것은 불순한 함수입니다 g:ToggleCmdTypes
. 이상적으로는 현재 레지스터에 할당된 명령을 반환해야 합니다 "
. 그런 다음 생성된 명령을 실행해야 합니다.
답변1
레지스터 손상을 방지하기 위해 레지스터를 우회하는 대신 이 방법을 사용할 수도 있습니다 feedkeys()
. 유일한 단점은 매크로로 기록하고 재생할 때 작동하지 않는다는 것입니다.
전반적으로 전반적인 접근 방식을 다시 생각해 보는 것이 좋습니다. 이와 같이 명령줄 모드로 전환하는 방법은 없습니다. 검색을 시작했지만 중간에야 자신이 명령으로 실행되기를 원한다는 사실을 깨닫는 사람은 누구입니까? !