![gnome-terminal이 있는 vim에서는 Ctrl+TAB이 작동하지 않습니다.](https://rvso.com/image/1416708/gnome-terminal%EC%9D%B4%20%EC%9E%88%EB%8A%94%20vim%EC%97%90%EC%84%9C%EB%8A%94%20Ctrl%2BTAB%EC%9D%B4%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
심각한 문제가 있습니다. 일반적으로 제가 사용하는 편집기는 vim이지만 Ctrl+Tab 동작을 매핑할 수는 없습니다. Ctrl+Tab(Ctrl + Shift + Tab)으로 탭을 전환하고 싶습니다. xterm에서는 이 매핑이 활성화되고 해당 작업이 사용됩니다. 그러나 gnome-terminal에서는 탭이 이스케이프 시퀀스로 나타났습니다. gnome-terminal을 사용하여 vim에서 탭을 전환하는 방법을 알려주십시오.
답변1
키보드 입력이 내부적으로 처리되는 방식으로 인해 불행히도 오늘날 GVIM에서도 일반적으로 가능하지 않습니다. + 알파벳이 아닌 문자 와 같은 일부 키 조합은 Ctrl매핑될 수 없으며 Ctrl+ 문자 대 Ctrl+ Shift+ 문자는 구별될 수 없습니다. (단말기가 고유한 메시지를 보내지 않는 한텀캡대부분은 그렇지 않습니다.) 삽입 또는 명령줄 모드에서 키 조합을 입력해 보세요. 아무 일도 일어나지 않거나 삽입되면 해당 키 조합을 사용할 수 없습니다. 이는 <Tab>
/ <C-I>
, <CR>
/ <C-M>
/ <Esc>
/ <C-[>
등에도 적용됩니다. (유일한 예외는 <BS>
/ 입니다 <C-H>
.) 이것은 알려진 문제점이며 vim_dev 및 #vim IRC 채널에서 다양한 논의의 주제입니다.
어떤 사람들(가장 Paul LeoNerd Evans)은 이 문제를 해결하기를 원하며(이 기능을 지원하는 터미널의 Vim 콘솔의 경우에도) 다양한 제안을 제시했습니다.http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8
그러나 현재로서는 아직 패치나 지원자가 나오지 않았지만 많은 사람들이 향후 Vim 8 주요 릴리스에 이 기능을 포함하고 싶다고 밝혔습니다.
답변2
문제는 터미널에서 Tab문자가 ^I
( Control- I)라는 점이다. 이는 탭을 누르는 동안 컨트롤을 누르는 것이 터미널에서 Vim으로 전달되는 일조차 하지 않는다는 것을 의미합니다. [1] 그냥 일반 탭 문자를 보냅니다.
GVim은 어떤 키가 어떤 조합으로 눌러지고 있는지 터미널에 의존할 필요가 없기 때문에 이를 지원할 수 있습니다. 즉, 키보드 이벤트에 더 직접적으로 액세스할 수 있으므로 수정된 특수 키를 보는 데 문제가 없습니다.
일관성을 유지할 수 있도록 매핑할 다른 키를 찾는 것이 좋습니다.
[1] "현대적인" 터미널 에뮬레이터에서는 이것이 더 이상 사실이 아니지만,~였다Vim이 사용하는 터미널 라이브러리(Ncurses)가 이 이벤트를 처리하지 않기 때문에 극복해야 할 거대한 레거시 장애물이 너무 오랫동안 사실이었습니다. 따라서 터미널이 기술적으로 이를 지원할 수 있더라도 Vim은 라이브러리 API가 지원하기 때문에 그렇게 할 수 없습니다. 할 수 없음에 의존합니다. 대략 1년에 한 번씩 Vim 개발자 목록에는 더 유능한 API로 전환하는 것을 포함하여 다양한 방법으로 이 문제를 해결하는 것에 대한 진지한 논의가 있었지만 아무런 결과도 나오지 않았습니다.
답변3
이에 대한 가장 가까운 대답은 Leader+ Tab및 Leader+ Shift+를 만드는 것입니다.Tab
map <leader><Tab> :bnext<cr>
map <leader><S-Tab> :bprevious<cr>
나는 (쉼표) Leader에 매핑되었으므로 +를 ,입력하고 있습니다 .,Tab
그러나 그들은 잘 작동하지 않습니다. 탭을 스크롤하기 위해 Leader계속 누르고 있을 수는 없습니다 . Tab이는 MRU(가장 최근에 사용됨) 동작에도 없습니다.
명확히 하기 위해 '탭 페이지' 대신 '버퍼'를 사용하고 있습니다. 왜냐하면 이러한 맵이 다른 편집자가 탭을 사용하는 목적에 대한 개념에 훨씬 더 적합하다는 것을 알았기 때문입니다.
대신 다음을 시도해 볼 수 있습니다.
map <leader><Tab> :b<Space>
그러면 ex 명령이 열리고 를 눌러 Tab버퍼를 스크롤할 수 있습니다. 그런 다음 ←및 를 사용하여 →앞뒤로 이동할 수도 있습니다.
이 접근 방식을 사용하면 열린 버퍼의 일부를 입력하기 시작할 수도 있으며 키를 누르면 Tab필터링된 열린 버퍼 목록이 순환됩니다.
개인적으로는 기본 MRU 동작을 제공하기 위해 Leader+를 매핑합니다 .Tab
map <leader><Tab> :b#<cr>