Ctrl-N을 수행하기 위해 vim 매핑을 구성하는 방법은 있지만 iskeyword에 ‘-‘가 포함 된 것처럼? 종종 Ctrl-N -이 키워드의 일부인 것처럼 동작하기를

Vim에서 프로그래밍 할 때 종종 Ctrl-N -이 키워드의 일부인 것처럼 동작하기를 원합니다 . 즉,에 포함 시키십시오 iskeyword. 그러나 이것을 위해 새로운 키 매핑을 만들고 Ctrl-N을 사용하여 기존 동작을 유지하고 싶습니다.

나는 이것을 시도했다 :

inoremap <C-B> <C-O>:set iskeyword+=-<CR><C-N>

… 어떤 종류의 작품이지만 iskeyword 옵션에는 -이후에 추가 동작이 포함되며 이는 바람직한 동작이 아닙니다.

이것은 또한 일종의 작품입니다.

inoremap <C-B> <C-O>:set iskeyword+=-<CR><C-N><C-O>:set iskeyword-=-<CR>

…하지만 팝업 메뉴가에 의해 종료됩니다 <C-O>.

케이크를 먹고 먹을 수있는 방법이 있습니까? 팝업 메뉴가 나타나고 그대로 유지되고 iskeyword나중에 원래 상태로 다시 설정 되었습니까?

또는이 문제를 해결하는 다른 방법이 있습니까?



답변

이것은 작동하는 것 같습니다.

function! CustomComplete(type)
    set iskeyword+=-
    return a:type
endfunction
inoremap <expr> <C-B> CustomComplete("<C-N>")
autocmd CompleteDone * set iskeyword-=-

우리는 표현식 매핑을 사용하여 실행할 iskeyword때마다 설정하는 함수를 실행합니다 (문제가 아닌 것 같습니다. 또한 완료가 완료되기 전에 autocmd를 찾지 못했습니다.) 함수의 반환 값은 다음과 같이 사용됩니다. 매핑의 대체 이 경우 <C-N>행동 을 원했습니다 . 그런 다음 -set iskeyword에서 set 을 제거하기 위해 CompleteDoneins-completion이 완료된 후 자동 완성을 사용합니다 .


또한 두 매핑을 모두 시도했지만 첫 번째 매핑 <C-O>은 완료 창을 죽이기 때문에 예상대로 작동하지 않습니다 .