In einem Terminal kann man nicht zwischen Ctrl+ Aund Ctrl+ Shift+ unterscheiden, Ada beide denselben Schlüsselcode ausgeben, sodass ich sehen kann, warum Vim dies nicht kann. Aber gVim, eine X-Anwendung, kann Ctrl+ Aund Ctrl+ Shift+ unterscheiden A. Gibt es eine Möglichkeit, diese beiden Dinge unterschiedlich abzubilden?
Für den Anfang möchte ich Folgendes tun: "Aus Zwischenablage einfügen" funktioniert wie das Gnome-Terminal, während der visuelle Modus Ctrl+ Vbeibehalten wird.
:nmap <C-S-V> "+gP
vim
key-bindings
Kohsuke Kawaguchi
quelle
quelle
Antworten:
Gvim tut es nicht, weil vim es nicht kann (unter normalen Umständen). Sorry, aber so ist es eben.
Jedoch...
Einige Terminals (z. B. xterm und iterm2) können so konfiguriert werden, dass für jede Tastenkombination eine beliebige Escape-Sequenz gesendet wird.
Fügen Sie zum Beispiel die folgenden zu
.Xresources
für xterm zu senden<Esc>[65;5u
für CtrlShiftA. Sie können das dann in Vim zuordnen<C-S-a>
. (65 ist der dezimale Unicode-Wert für Shift-a und 5 ist das Bit für den Strg-Modifikator. Das u steht in diesem Fall für "Unicode".)iTerm und [u] rxvt können auch dafür konfiguriert werden (Beispiele nicht angegeben).
Weitere Informationen: http://www.leonerd.org.uk/hacks/fixterms/
quelle
\n
. Verwenden Sie Backslash, um Linien zu teilen. Um beispielsweise auch <kbd> CSB </ kbd> und <kbd> CSF </ kbd> zuzuordnen, verwenden SieXTerm*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>
Strg-Umschalt-B zuordnen, um eine Nachricht in der Statuszeile zu drucken. Auf AskUbuntu gab es eine ähnliche Q und ich habe zusammengefasst dies.xterm-256color
(die jüngsten) leiden unter so vielen Einschränkungen.xterm-256color
.Wie bereits erwähnt, gibt es keine Möglichkeit, eine
<C-S-A>
andere Zuordnung vorzunehmen als<C-A>
.Mit Tools wie
autokey
(für Linux & Windows) oderautohotkey
(für Windows) können Sie jedoch eine Neuzuordnung vornehmen<C-S-A>
, um für bestimmte Anwendungen andere Tastenanschläge zu senden.zB Auf meinem System habe ich diese Einstellung in
autokey
:Weisen Sie ihm folgende Eigenschaften zu:
ctrl+shift+a
gnome-terminal-server.Gnome-terminal
Dann
~/.vimrc
können Sie ein Mapping erstellen, um<S-F1>a
zu tun, was Sie wollen.Anmerkungen:
<S-F1>
als eine Art Führungsschlüssel zum Erkennen verwendet<C-S>
. Das war , weil mein Terminal nicht akzeptieren<F13>
-<F37>
etc Schlüssel. Wenn Ihre Anwendung dies unterstützt, wird (gvim
glaube ich) die Verwendung dieser Schlüssel empfohlen.vim
ingnome-terminal
. Also habe ichwindow class = gnome-terminal-server.Gnome-terminal
als Filter verwendet. Ändern Sie es, um es zu verwenden,gvim
wenn Sie möchten.autokey
unterstützt eine Schaltfläche zum Erfassen der Eigenschaften anderer Fenster wie Klasse / Titel.quelle
apt install autokey-gtk
?bindsym --release Control+Shift+h exec --no-startup-id xdotool key --clearmodifiers comma w m h
, was drückt,,wmh
wenn ich drücke<C-S-h>
, und dann weiß vim, wie man damit,wmh
<C-S-H>
wenn ich darauf drücke.Wenn Sie die vorhandene CV-Funktionalität verlieren, können Sie stattdessen CQ verwenden. Siehe: Hilfe STRG-V-Alternative.
quelle
NeoVim bietet diese Funktionalität jetzt sowohl für Terminal- als auch für GUI-Clients an. Siehe : h nvim-features-new
quelle
<m-s-...>
Varianten) Sie arbeiten meist vollständig aus dem Kasten heraus .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.
es, dass vor dem Teil "Groß- und Kleinschreibung beachten" ein Zeilenumbruch steht, der dies mehrdeutig macht. Danke für die Korrektur, @ JustinM.Keyes. Außerdem scheint vim 8.1 zwischen<M-a>
und zu unterscheiden<M-A>
.<c-s-l>
sich perfekt von<c-l>
inKonsole
ohne zusätzlichen AufwandAufgrund der Art und Weise, wie die Tastatureingabe intern behandelt wird, ist dies heute selbst in GVIM leider nicht mehr möglich. Einige Tastenkombinationen wie Ctrl+ nicht alphabetisch können nicht zugeordnet werden, und Ctrl+ Buchstabe vs. Ctrl+ Shift+ Buchstabe kann nicht unterschieden werden. (Es sei denn, Ihr Terminal sendet einen eindeutigen Termcap- Code dafür, was die meisten nicht tun.) Geben Sie im Einfüge- oder Befehlszeilenmodus die Tastenkombination ein. Wenn nichts passiert / eingefügt wird, können Sie diese Tastenkombination nicht verwenden. Dies gilt auch für
<Tab>
/<C-I>
,<CR>
/<C-M>
/<Esc>
/<C-[>
usw. (Einzige Ausnahme ist<BS>
/<C-H>
.) Dies ist ein bekannter Schmerzpunkt und Gegenstand verschiedener Diskussionen über vim_dev und den # vim-IRC-Kanal.Einige Leute (vor allem Paul LeoNerd Evans) wollen das beheben (sogar für Konsolen-Vim in Terminals, die dies unterstützen) und haben verschiedene Vorschläge unterbreitet, vgl. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8
Bis heute haben sich jedoch noch keine Patches oder Freiwilligen gemeldet, obwohl viele den Wunsch geäußert haben, dies in einer zukünftigen Vim-Version zu tun.
quelle
Wie Sie bereits bemerkt haben, erhalten Sie denselben Schlüsselcode. Die einzige Möglichkeit, sie zu unterscheiden, besteht darin, den Status des ShiftSchlüssels in Ihrer Ereignisbehandlungsfunktion zu überprüfen . Wenn Sie zwischen Tastendruck und Verarbeitung eine Verzögerung von mehr als 0,5 Sekunden haben, werden Sie natürlich einige Treffer verpassen.
quelle