종결 자에서 Ctrl- 백 스페이스 맵핑


8

최근에 Vim을 사용하기 시작했습니다. 이전 편집기에서 Ctrl- 를 눌러 전체 단어를 삭제하는 데 익숙했습니다 Backspace. 문서보고 후 나는이가 눌러 이루어졌다 것을 발견 Ctrl- w빔에. 문제는 Ctrl- 를 누르는 데 익숙해지면 w단어 철자가 틀릴 때마다 탭을 닫고 채팅을 시작했습니다 (이 질문을 쓰는 동안이 탭을 5 번 닫았습니다). 그래서 Vim에서 키를 매핑하는 방법을 확인하고 이것을 시도했습니다.

:imap <C-BS> <C-w>

불행히도 작동하지 않았습니다. 연구의 조금 후에 나는 터미널 사이를 구분하지 않는 것으로 확인 Ctrl- BackspaceBackspace. 이 문제를 해결하기 위해 해킹과 패치를 보았지만 터미네이터 (사용하려는 에뮬레이터)에서 작동시키지 못했습니다.

지도 할 수있는 방법이 있나요 Ctrl- Backspace빔에 터미네이터를 사용하는 경우는?


2
Vim 지옥에 오신 것을 환영합니다.
romainl

2
나는이 지옥이 상당히 생산적이고 패치로 개선 될 수 있다는 사실을 좋아한다.
Ingo Karkat

BTW, 나는 Vim 8.0 에서이 특정 문제가 해결되었다는 희망을 가질 수 있도록 이러한 종류의 질문을 수집하고 있습니다. 나는 점점 더 균일 한 매핑 후보들도 원한다.
Ingo Karkat

이 문제는 vim (AFAIK)에서 실제로 해결 될 수 없습니다. vim이 실행중인 터미널에 따라 다릅니다. vte (Gnone Terminal, Mate Terminal, Guake 등)를 사용하는 다양한 사용자의 경우이 문제는 최근 주목을 받았으며 곧 해결 될 수 있습니다. 이 그놈 버그를보십시오 : bugzilla.gnome.org/show_bug.cgi?id=420039
trusktr

@IngoKarkat 위의 의견을 참조하십시오. ^
trusktr

답변:


8

키보드 입력이 내부적으로 처리되는 방식으로 인해 불행히도 오늘날 일반적으로 불가능합니다. Ctrl알파벳이 아닌 + 와 같은 일부 키 조합 은 매핑 할 수 없으며 Ctrl+ 문자 대 Ctrl+ Shift+ 문자를 구별 할 수 없습니다. (터미널이 고유 한 용어 캡 코드를 보내지 않는 한 대부분의 경우는 그렇지 않습니다.) 삽입 또는 명령 행 모드에서 키 조합을 입력하십시오. 아무 것도 입력 / 삽입되지 않으면 해당 키 조합을 사용할 수 없습니다. 이것은 <Tab>/ <C-I>, <CR>/ <C-M>/ <Esc>/ <C-[>etc 에도 적용됩니다 . (예외는 <BS>/ <C-H>.입니다.) 이것은 알려진 문제이며 vim_dev 및 #vim IRC 채널에 대한 다양한 토론의 주제입니다.

일부 사람들 (이전에는 Paul LeoNerd Evans)이이 문제를 해결하기를 원하고 (이를 지원하는 터미널의 콘솔 Vim의 경우에도) cp라는 다양한 제안을 떠올 렸습니다. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

그러나 현재 많은 패치 나 자원 봉사자들은 아직 나오지 않았지만, 많은 사람들이 향후 Vim 8 주요 릴리스에서 이것을 갖기를 원했습니다.


빠른 답변 주셔서 감사합니다. vim에 ctrl-w를 사용하고 브라우저에 ctrl-backspace를 사용하는 데 익숙해 져야한다고 생각합니다.
user1026044

Ctrl-W의 좋은 점은 Bash 등에서도 작동한다는 것입니다.
Ingo Karkat

그래, 알아 그러나 여전히 다른 모든 것에 대해서는 ctrl-backspace를 사용해야하며 ctrl-w가 탭과 창을 닫는 데 표준으로 사용된다는 사실은 성가신 일입니다. 아마 잠시 후에 그것에 익숙해 질 것입니다.
user1026044

그러나 이것은 vim 코드베이스에서 순수하게 해결할 수 있습니까? vim 코드베이스의 코드가 실행중인 터미널이 vim에 키 조합에 대해 동일한 정확한 입력을 보내는 경우 백 스페이스와 Ctrl + 백 스페이스를 구별하는 방법은 무엇입니까? 이것은 vim이 아닌 vim이 실행중인 터미널에서 수정 해야하는 것 같습니다. 예를 들어 Guake는 ^?백 스페이스와 ctrl + backspace를 모두 전송 하므로 (AFAIK)를 구분할 수 없습니다. 반면에 xterm ^H은 백 스페이스와 ^?ctrl + backspace를 전송 하여 구별 할 수있게합니다.
trusktr

그러나 불행히도 xterm에서 백 스페이스 ( ^H)는 ctrl + h ( ^H)와 구별 할 수 없습니다 . 아마도 우리는 세 가지를 모두 구별 할 수있는 새로운 이스케이프 시퀀스를 만들 수 있습니까? 얼마나 쉬운 지 모르겠지만 현재 상태 (일부 터미널 ^?은 백 스페이스에 사용 하고 다른 터미널은 ^H그 반대)를 사용 하기 때문에 안전한 것으로 보입니다. 많은 터미널 응용 프로그램을 상상할 수 없습니다 (만약 있다면) ctrl + backspace 시나리오를 고려하십시오 (다양한 터미널로 인해 완전히
결정적이지 않을 것입니다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.