Vim의 명령 유형 모드를 프로그래밍 방식으로 변경하는 방법은 무엇입니까?

Vim의 명령 유형 모드를 프로그래밍 방식으로 변경하는 방법은 무엇입니까?

현재 명령줄을 잃지 않고 한 명령 유형 모드에서 다른 명령 유형 모드로 쉽게 전환할 수 있는 방법이 있습니까?

~/.vimrc파일 에서 <space>및 문자를 다음으로 <c-space>다시 매핑 합니다.

  1. N, V, O => :
  2. 나 =>:
  3. : => / => ?

위 동작을 수행하는 코드는 다음과 같습니다.

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(). 유일한 단점은 매크로로 기록하고 재생할 때 작동하지 않는다는 것입니다.

전반적으로 전반적인 접근 방식을 다시 생각해 보는 것이 좋습니다. 이와 같이 명령줄 모드로 전환하는 방법은 없습니다. 검색을 시작했지만 중간에야 자신이 명령으로 실행되기를 원한다는 사실을 깨닫는 사람은 누구입니까? !

관련 정보