개행 문자를 삽입하지 않고 vim 자동 완성 목록에서 항목을 선택하십시오.

개행 문자를 삽입하지 않고 vim 자동 완성 목록에서 항목을 선택하십시오.

vim의 다소 성가신 기능은 삽입 모드에서 자동 완성(Ctrl-N)을 수행하고 원하는 항목에 대해 아래쪽 화살표 키를 누른 다음 Enter를 누르면 해당 항목이 삽입되지만 You도 삽입된다는 것입니다. 개행 문자가 필요합니다. 그런 다음 삭제해야 합니다.

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

답변1

이는 현재 팝업 메뉴 상태에 따라 다릅니다( 참조 :help popupmenu-completion). 귀하의 질문을 통해 귀하가 상태 2에 있다는 것을 이해합니다(완료를 찾기 위해 화살표 키를 눌렀기 때문입니다). 그러나 Enter상태 2의 기본 동작은 개행 없이 완성을 삽입하는 것입니다. 설명하는 내용은 일반적으로 상태 1의 동작입니다(즉, Ctrl+ N/ Ctrl+ 를 사용하는 경우 P).

모든 상태에서 일관되게 작업하는 한 가지 방법은 Ctrl+ 를 사용하는 것입니다 Y. 나는 Y가 "예, 말씀을 받아들이십시오"를 의미한다는 것을 기억하고 싶습니다. geedoubleya의 답변과 같이 콘텐츠를 다시 매핑하지 않는 한 전체 단어 뒤에 텍스트 입력을 시작하는 것도 가능합니다.

같은 맥락에서 Ctrl+를 눌러 E메뉴를 취소하고 메뉴가 호출되기 전의 텍스트를 유지할 수 있습니다. 다른 상황에서 Ctrl+ ECtrl+ 쌍을 사용하는 데 익숙하다면 Y(예: 일반 모드에서 위 또는 아래로 스크롤하거나 삽입 모드에서 커서 아래 또는 위에 문자 삽입) 이 방법을 염두에 두는 한 가지 방법입니다. . "나가기" 메뉴나 그와 유사한 것으로 생각할 수도 있을 것 같습니다.

더보기 :help popupmenu-keys.

답변2

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

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 플러그인이 매핑이 편리할 수 있습니다.

답변3

나는 이것이 오래되었다는 것을 알고 있지만 echristopherson의 답변은 유익하고 훌륭하지만 누구든지 빠르고 더러운 솔루션을 원한다면 geedoubleya의 답변을 다소 찬성합니다.

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

답변4

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

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

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

이를 활성화하려면 다음을 .vimrc에 추가하세요(Stackoverflow의 다른 사람들 덕분에):

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

또는 화살표 키를 사용하는 대신 Ctrl-n옵션을 반복 Ctrl-p하고(뒤로 이동) 현재 행을 이동할 때 바꿀 수 있습니다. Entervim 키 매핑은 필요하지 않습니다.

관련 정보