Jak mapować Ctrl+A i Ctrl+Shift+a inaczej?
W terminalu nie można odróżnić Ctrl+A i Ctrl+Shift+a ponieważ oba emitują ten sam kod klucza, więc widzę, dlaczego Vim nie może tego zrobić. Ale gVim, będąc aplikacją X, potrafi odróżnić Ctrl+A i Ctrl+Shift+A . Czy jest jakiś sposób, aby mapować te dwie rzeczy inaczej?
Na początek chciałbym zrobić coś takiego: niech "wklej ze schowka" działa jak Terminal Gnome, zachowując Ctrl+V do trybu wizualnego.
:nmap <C-S-V> "+gP
7 answers
Gvim tego nie robi, ponieważ vim nie może tego zrobić (w normalnych okolicznościach). Przepraszam, ale tak już jest.
Jednak...
Niektóre terminale (np. xterm i iterm2) mogą być skonfigurowane tak, aby wysyłać dowolną sekwencję ucieczki dla dowolnej kombinacji klawiszy.
Na przykład dodaj następujący tekst do .Xresources
dla Xterm aby wysłać <Esc>[65;5u
dla CtrlShiftA . Następnie możesz odwzorować to w Vimie na <C-S-a>
. (65 jest dziesiętną wartością Unicode dla shift-a i 5 jest bitem modyfikatora ctrl. U w tym przypadku oznacza "unicode".)
! .Xresources
XTerm*vt100.translations: #override Ctrl ~Meta Shift <Key>a: string(0x1b) string("[65;5u")
ITerm i [u]rxvt mogą być również skonfigurowane do tego celu (przykłady nie są podane).
Więcej informacji: http://www.leonerd.org.uk/hacks/fixterms/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-18 04:51:53
Jak już wspomniano, nie ma sposobów na mapowanie <C-S-A>
inaczej niż <C-A>
.
Jednak przy użyciu takich narzędzi jak autokey
(dla Linuksa i windows) lub autohotkey
(W przypadku systemu windows), można przerobić <C-S-A>
, Aby wysłać inny obrys klawisza dla określonych aplikacji.
Np. w moim systemie mam takie ustawienie w autokey
:
$ cat ~/.config/autokey/data/gnome-terminal/ctrlshifta-gnome-terminal.py
#ctrl+shift+a sends '<S-F1>a'
keyboard.send_keys("<shift>+<f1>a") # Note that `f` in `f1` needs to be in lower case.
Przypisać mu te właściwości:
- klawiatura-Skrót jako
ctrl+shift+a
- klasa okien:
gnome-terminal-server.Gnome-terminal
Wtedy Twój {[9] } może tworzyć mapowanie dla <S-F1>a
, aby robić, co chcesz.
Uwagi:
- użyłem
<S-F1>
jako swego rodzaju klucz leader do wykrywania<C-S>
. To dlatego, że mój terminal nie akceptował<F13>
-<F37>
klucze itp. Jeśli aplikacja obsługuje go, (gvim
czy myślę) używanie tych kluczy jest zalecane. - głównie
vim
wgnome-terminal
. Więc użyłemwindow class = gnome-terminal-server.Gnome-terminal
jako filtra. Zmodyfikuj go do użyciagvim
, jeśli chcesz.autokey
obsługuje przycisk do przechwytywania innych okien właściwości takie jak class / title.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-18 04:27:16
Jeśli przeszkadza ci utrata funkcjonalności C-V, możesz użyć C-Q zamiast tego. Zobacz: help Ctrl-V-alternative.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-07 10:31:51
Ze względu na sposób, w jaki wejście z klawiatury jest obsługiwane wewnętrznie, niestety nie jest to obecnie możliwe, nawet w GVIM. Niektóre kombinacje klawiszy, takie jak Ctrl + nie-Alfabetyczne nie mogą być mapowane, oraz Ctrl + litera vs. Ctrl + Shift + litera nie może być rozróżniona. (Chyba że twój terminal wyśle dla niego oddzielny kod termcap, którego większość nie wysyła.) w trybie wstawiania lub Wiersza poleceń spróbuj wpisać kombinację klawiszy. Jeśli nic się nie dzieje / jest włożony, nie można 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 punkt bólu 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 Vim w terminalach, które to obsługują), i mają 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 łatki ani ochotnicy, chociaż wielu wyraziło chęć posiadania tego w przyszłym wydaniu Vima.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-05 15:08:11
NeoVim oferuje teraz tę funkcjonalność zarówno dla swoich terminali, jak i klientów gui. Zobacz :h nvim-features-new
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-24 09:44:55
Jak już zauważyłeś, dostajesz ten sam kod. Tak więc jedynym sposobem na ich rozróżnienie jest sprawdzenie stanu klawisza Shift 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 kilka trafień.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-18 05:12:59
Większość emulatorów terminali domyślnie traktuje control plus shift po prostu jako control. Zamiast tego zazwyczaj mapujesz te kombinacje klawiszy do sekwencji escape i słuchasz tego wewnątrz aplikacji terminala.
Krok 1: Skonfiguruj emulator terminala do bindowania Ctrl+Shift+A do sekwencji Esc,A .
Twój emulator terminala to program, który pokazuje rzeczywiste okno terminala. Przy dostępie do serwera poprzez SSH, terminal emulator jest programem na komputerze lokalnym. Binding keys działa inaczej w różnych emulatorach terminali. Na przykład:
- dla urxvt, dodaj {[1] } do pliku konfiguracyjnego
~/.Xresources
i przeładuj go za pomocąxrdb ~/.Xresources
. - Dla iTerm2 otwórz Preferences - > Keys, Dodaj wpis i bind Ctrl+Shift+A do akcji "Send Escape Sequence" i wpisz
A
w poniższe pole.
Krok 2: Bind Esc,a do polecenia w Vim.
Dodaj mapowanie klucza do konfiguracji ~/.vimrc
i przeładuj go za pomocą :source ~/.vimrc
:
nnoremap <esc>a your command here
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-19 21:32:20