2012-04-29 8 views
6

Czy istnieje sposób na uzyskanie trybu podobnego do tego, w którym mogę uderzać klawiszami i kombinacjami klawiszy, a vim wypisze, jakie klawisze lub znaki myśli, że naciska?Jak mogę zobaczyć, jakie klucze myśli vim, że uderzam?

Specyficzny problem pokrewny: Mam powiązania klawiszy, które działają w MacVim i GVim, ale nie działają w terminal-vim, którego używam na Linuksie przez SSH na ekranie. Doszedłem do wniosku, że powodem jest to, że vim sądzi, że klawisze, które naciskam, różnią się od tego, jak MacVim je interpretuje.

W moim .vimrc:

map <M-,> :split<CR> " Horizontal split 
map <M-.> :vsplit<CR> " Vertical split 
map <M-/> :close<CR> 

w moim vim na :map (MacVim pokazuje to samo):

¯    :close<CR><Space> 
®    :vsplit<CR> " Vertical split 
¬    :split<CR> " Horizontal split 

Działa w MacVim i GVim, ale nie działa w żaden terminal- oparty na vim. Próbowałem tego w wielu terminalach (Terminal OSX i Term2, Terminal KDE, Terminal Gnome itp.). Byłem także świadkiem tego z innymi modyfikatorami i kluczowymi kombinacjami. Wygląda na to, że vim przechwytuje sekwencje klawiszy, ale interpretuje je na przykład jako coś innego niż <M-,>.

Chciałbym mieć sposób, aby dowiedzieć się, co vim myśli, że naciskam, więc mogę odpowiednio zapisać odwzorowania.

Odpowiedz

6
  1. i, aby przełączyć się do trybuwkładką.
  2. <C-v>.
  3. <key> lub kombinacja.
  4. Vim drukuje "nieprzetworzoną" wartość wciśniętego klawisza/kombinacji.

Tutaj (gnome-terminal na Ubuntu 11.04), wpisując i<C-v>, a następnie <Alt>, a następnie , drukuje coś, co wygląda jak ^[, co oznacza "Escape". Klucz Alt (który, jak uważam, jest tym, który chcesz użyć dla <Meta>) nie jest rozpoznawany jako <Meta> ani jako <Alt>.

Bezpośrednim wnioskiem jest to, że CLI Vim nie lubi <M-> (a wiele emulatorów terminali i tak nie radzi sobie z nim zbyt dobrze). Niektóre emulatory terminalu umożliwiają mapowanie klucza <Alt> na Meta, ale nie jest to idealne rozwiązanie wieloplatformowe (często używam <Alt> w systemie Mac OS X do wprowadzania znaków specjalnych).

Na tej maszynie

nnoremap ^[, :split<CR> " ^[ is <C-v><Esc> 

robi dokładnie to, co myślę, że chcesz, choć.

Jeśli chcesz nadal używać skrótów <M-> zarówno w GUI, jak iw CLI, musisz zachować dwa osobne zestawy skrótów. Jeśli masz dziesiątki niestandardowych mapowań w swoim .vimrc, szybko stanie się trochę trudny do zarządzania.

Dlatego myślę, że należy użyć mapowania, które działają wszędzie lubię:

:nnoremap <leader>, :split<CR> 
:nnoremap <leader>. :vsplit<CR> 
:nnoremap <leader>/ :close<CR> 

Klucz domyślny <leader> jest \ ale mam ustawić go ,.

Należy pamiętać, że nie trzeba używać <leader>key, po prostu mapując ,,, ,. i ,/ działa również.

Zobacz :help <leader>.

+0

Czy to oznacza, że ​​mapowanie ''^[, '' to say '' vsplit '' powinno pozwolić na '' '' do pracy w CLI Vim? Nie byłem w stanie wykonać tej pracy. Czy sugerujesz również, że klawisze modyfikujące generalnie nie zachowują się dobrze w CLI Vim? Czy zamiast tego powinienem trzymać się poszczególnych klawiszy? – shazow

+0

Widzę moją odpowiedź, to nie jest liternictwo '^ [' ('^', po którym następuje '['), to pojedynczy znak, który wygląda jak '^ ['. Można go uzyskać, naciskając ''. – romainl

+0

Edytowałem swoją odpowiedź, aby uzyskać większą precyzję. Klawisze modyfikatorów nie działają w CLI Vim: wiele kombinacji '' ma już pewne znaczenie i nie można używać razem '' i ''. Więc tak, moja rada to zapomnieć o kluczach modyfikatorów ** ** w CLI Vim * i * w GUI Vim. Moje mapowania '' działają wszędzie i nie muszę przechowywać dwóch zestawów odwzorowań w mojej pamięci. – romainl

Powiązane problemy