줄 바꿈을 삽입하지 않고 vim 자동 완성 목록에서 항목을 선택하십시오. 있고 자동 완성 (Ctrl-N)을하고 원하는

vim의 다소 성가신 기능은 삽입 모드에 있고 자동 완성 (Ctrl-N)을하고 원하는 항목까지 화살표 키를 누른 다음 Enter 키를 누르면 항목을 삽입하지만 줄 바꿈을 삽입한다는 것입니다. 그런 다음 삭제해야합니다.

원치 않는 줄 바꿈을 추가하지 않고 자동 완성 목록에서 항목을 선택하는 방법이 있습니까?



답변

사용중인 팝업 메뉴 상태에 따라 다릅니다 (참조 :help popupmenu-completion). 귀하의 질문에서 귀하가 상태 2에 있다는 것을 이해합니다 (완료를 찾기 위해 화살표 키를 눌렀으므로). 그러나 Enter상태 2 의 기본 동작은 줄 바꿈없이 완료를 삽입하는 것입니다. 설명하는 것은 일반적으로 상태 1의 동작입니다 ( Ctrl+ N/ Ctrl+ 를 사용할 때 P입니다).

모든 주에서 일관되게 작동하는 방법은 Ctrl+ 를 사용하는 것 Y입니다. 나는 Y가 “그렇습니다, 그 말을 받아들이십시오”라는 의미로 기억하고 싶습니다. geedoubleya의 답변에서와 같이 항목을 다시 매핑하지 않은 한 완성 된 단어 뒤에 나오는 텍스트를 입력하기 시작할 수도 있습니다.

같은 맥락에서 Ctrl+ E를 눌러 메뉴를 취소하고 텍스트를 호출하기 전과 같이 그대로 둘 수 있습니다. 다른 상황에서 Ctrl+ ECtrl+ 의 페어링에 익숙한 경우 Y(예 : 일반 모드에서 위 또는 아래로 스크롤하거나 삽입 모드에서 커서의 위 또는 아래에 문자를 삽입하는) 여기에서 기억하는 한 가지 방법입니다. 메뉴 나 그와 비슷한 것을 “종료”하는 것으로 생각할 수 있습니다.

자세한 내용 :help popupmenu-keys을 참조하십시오 .


답변

개인적으로 나는 이것을 사용합니다 :

inoremap <expr> <TAB> pumvisible() ? "\<C-y>" : "\<CR>"
inoremap <expr> <Esc> pumvisible() ? "\<C-e>" : "\<Esc>"
inoremap <expr> <C-j> pumvisible() ? "\<C-n>" : "\<Down>"
inoremap <expr> <C-k> pumvisible() ? "\<C-p>" : "\<Up>"

CtrlP 플러그인 을 사용하는 사람이라면 누구나이 매핑이 편리 할 것입니다.


답변

나는 이것이 오래되었지만, 누군가가 빠르고 더러운 해결책을 원한다면 echristopherson의 대답이 유익하고 훌륭하기 때문에 geedoubleya의 대답에 대한 일종의 돼지 후원을 알고 있습니다.

inoremap <expr> <cr> ((pumvisible())?("\<C-y>"):("\<cr>"))

답변

화살표 키를 사용하는 대신 j& k키를 사용하여 자동 완성 목록을 스크롤 할 수 있습니다 .

이렇게하면 스크롤 할 때 선택한 단어와 일치하도록 현재 줄이 변경됩니다.

따라서 대체 단어의 끝에서 커서가 여전히 삽입 모드에 있으므로 Enter를 누를 필요가 없습니다.

이것을 활성화하려면 이것을 .vimrc에 추가하십시오 (스택 오버 플로우에서 다른 사람들에게 감사합니다).

inoremap <expr> j ((pumvisible())?("\<C-n>"):("j"))
inoremap <expr> k ((pumvisible())?("\<C-p>"):("k"))

별도로 화살표 키를 사용하는 대신 Ctrl-n옵션을 통해 저주하는 옵션을 반복하고 ( Ctrl-p뒤로 이동) 현재 줄을 움직일 때 필요 Enter하거나 vim 키 매핑이 필요하지 않습니다 .