W terminalu nie można rozróżnić Ctrl+ Ai Ctrl+ Shift+, Aponieważ oba emitują ten sam kod klucza, więc widzę, dlaczego Vim nie może tego zrobić. Ale gVim, będąc aplikacją X, może rozróżniać Ctrl+ Ai Ctrl+ Shift+ A. Czy istnieje sposób na odwzorowanie tych dwóch rzeczy w inny sposób?
Na początek chciałbym zrobić coś takiego: sprawić, by funkcja „wklej ze schowka” działała jak terminal Gnome, jednocześnie zachowując Ctrl+ Vw trybie wizualnym.
:nmap <C-S-V> "+gP
vim
key-bindings
Kohsuke Kawaguchi
źródło
źródło
Odpowiedzi:
Gvim tego nie robi, ponieważ vim nie może tego zrobić (w normalnych okolicznościach). Przepraszam, ale tak właśnie jest.
Jednak...
Niektóre terminale (np. Xterm i iterm2) można skonfigurować tak, aby wysyłały dowolną sekwencję ucieczki dla dowolnej kombinacji klawiszy.
Na przykład dodać następujące
.Xresources
dla xterm wysłać<Esc>[65;5u
do CtrlShiftA. Możesz następnie zmapować to w Vimie na<C-S-a>
. (65 to dziesiętna wartość Unicode dla shift-a, a 5 to bit modyfikatora ctrl. Litera u w tym przypadku oznacza „unicode”).iTerm i [u] rxvt mogą być również skonfigurowane, aby to zrobić (przykłady nie są dostarczane).
Więcej informacji: http://www.leonerd.org.uk/hacks/fixterms/
źródło
\n
. Użyj odwrotnego ukośnika, aby podzielić linie. Np. Aby zmapować również <kbd> CSB </kbd> i <kbd> CSF </kbd> użyj tego:XTerm*vt100.translations: #override Ctrl ~Meta Shift <Key>a: string(0x1b) string("[65;5u") \n Ctrl ~Meta Shift <Key>b: string(0x1b) string("[66;5u") \n Ctrl ~Meta Shift <Key>f: string(0x1b) string("[70;5u")
map <ESC>[66;5u :echo "ctrl-shift-b received"<CR>
Aby zmapować ctrl-shift-b, aby wydrukować komunikat w linii statusu. Na AskUbuntu było podobne pytanie i podsumowałem to.xterm-256color
(ostatni) cierpią z powodu tak wielu ograniczeń.xterm-256color
.Jak już wspomniano, nie ma możliwości mapowania
<C-S-A>
inaczej niż<C-A>
.Jednak używając narzędzi takich jak
autokey
(dla systemu Linux i Windows) lubautohotkey
(dla systemu Windows), możesz zmienić mapowanie,<C-S-A>
aby wysłać różne naciśnięcia klawiszy dla określonych aplikacji.np. w moim systemie mam to ustawienie w
autokey
:Przypisz mu te właściwości:
ctrl+shift+a
gnome-terminal-server.Gnome-terminal
Następnie
~/.vimrc
możesz utworzyć mapowanie,<S-F1>a
aby robić, co chcesz.Uwagi:
<S-F1>
jako klucza lidera do wykrywania<C-S>
. To dlatego, że mój terminal nie akceptował kluczy<F13>
-<F37>
itp. Jeśli twoja aplikacja to obsługuje, (gvim
myślę, że) użycie tych klawiszy jest zalecane.vim
wgnome-terminal
. Więc użyłemwindow class = gnome-terminal-server.Gnome-terminal
jako filtra. Zmodyfikuj go, aby użyć,gvim
jeśli chcesz.autokey
obsługuje przycisk do przechwytywania właściwości innych okien, takich jak klasa / tytuł.źródło
apt install autokey-gtk
?bindsym --release Control+Shift+h exec --no-startup-id xdotool key --clearmodifiers comma w m h
,wmh
<C-S-h>
,wmh
<C-S-H>
gdy to naciśnę.Jeśli przeszkadza Ci utrata istniejącej funkcjonalności CV, możesz zamiast tego użyć CQ. Zobacz: help CTRL-V-alternatywa.
źródło
NeoVim oferuje teraz tę funkcjonalność zarówno dla swoich klientów terminala, jak i dla klientów GUI. Zobacz : h nvim-features-new
źródło
<m-s-...>
warianty) działają w większości po wyjęciu z pudełka.ALT (|META|) chords always work (even in the |TUI|). Map |<M-| with any key: <M-1>, <M-BS>, <M-Del>, <M-Ins>, <M-/>, <M-\>, <M-Space>, <M-Enter>, etc. Case-sensitive: <M-a> and <M-A> are two different keycodes.
, że przed częścią „Uwzględniana wielkość liter:” jest podział wiersza, co sprawia, że jest to niejednoznaczne. Dzięki za korektę, @ JustinM.Keyes. 8.1 nie rozróżnia także Vim<M-a>
i<M-A>
jak dobrze.<c-s-l>
doskonale odróżnia się od<c-l>
inKonsole
bez dodatkowych kłopotówZe względu na sposób, w jaki wejście klawiatury jest obsługiwane wewnętrznie, niestety nie jest to obecnie generalnie możliwe, nawet w GVIM. Niektórych kombinacji klawiszy, takich jak Ctrl+ niealfabetyczne, nie można zamapować, a Ctrl+ litera i Ctrl+ Shift+ litera nie mogą być rozróżnione. (Chyba że twój terminal wysyła dla niego odrębny kod termcap , czego większość nie robi.) W trybie wstawiania lub linii poleceń spróbuj wpisać kombinację klawiszy. Jeśli nic się nie dzieje / nie jest wstawione, nie możesz użyć tej kombinacji klawiszy. Dotyczy to również
<Tab>
/<C-I>
,<CR>
/<C-M>
/<Esc>
/<C-[>
itd. (Jedynym wyjątkiem jest<BS>
/<C-H>
.) Jest to znany problem i temat różnych dyskusji na vim_dev i kanale IRC #vim.Niektórzy ludzie (przede wszystkim Paul LeoNerd Evans) chcą to naprawić (nawet dla konsoli Vima w terminalach, które to obsługują) i przedstawili różne propozycje, cp. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8
Ale na dzień dzisiejszy nie pojawiły się jeszcze żadne poprawki ani ochotnicy, chociaż wielu wyraziło chęć posiadania tego w przyszłym wydaniu Vima.
źródło
Jak zauważyłeś, otrzymujesz ten sam kod. Dlatego jedynym sposobem na ich rozróżnienie jest sprawdzenie stanu Shiftklucza w funkcji obsługi zdarzeń. Oczywiście, jeśli masz więcej niż 0,5 sekundy opóźnienia między naciśnięciem klawisza a przetwarzaniem, przegapisz niektóre trafienia.
źródło