Ein Textterminal überträgt nur Zeichen (genauer gesagt Bytes), keine Schlüssel. Schlüssel und Schlüsselbänder (Schlüssel mit Modifikatoren) werden als Zeichenfolgen codiert. Schlüssel, die druckbare Zeichen einfügen, werden als solche gesendet. Funktionstasten werden als Escape-Sequenzen gesendet. Die meisten Escape-Sequenzen bestehen aus dem Zeichen Escape ( ?\e
in Emacs-Syntax), gefolgt von zwei oder mehr druckbaren Zeichen. Siehe Steuerungstasten und Auf- / Ab-Tasten im Terminal zur Verwendung durch Emacs und Wie funktionieren Tastatureingaben und Textausgaben? für mehr Informationen.
Emacs hat einen Mechanismus, um Escape-Sequenzen in einen eigenen Schlüsselbegriff zu übersetzen. Die Übersetzungstabelle input-decode-map
wird beim Start von Emacs initialisiert (genauer gesagt, wenn ein neuer Frame geöffnet ist: Diese Variable hat an jedem Terminal einen anderen Wert). Manchmal kennt Emacs nicht alle vom Terminal gesendeten Escape-Sequenzen.
In Ihrem Fall scheint Emacs die falsche Interpretation für die von Shift+ gesendete Escape-Sequenz zu haben Up. Sie müssen es erklären, um es als S-up
eher als zu interpretieren select
. Stellen Sie zunächst fest, wie die Escape-Sequenz lautet. *scratch*
Drücken Sie im Puffer Ctrl+ und Qdann Shift+ Up. Der Befehl C-q
bewirkt, dass das nächste Zeichen, nämlich das Escape-Zeichen, wörtlich eingefügt wird, gefolgt von der restlichen Escape-Sequenz. Angenommen, Shift+ Upsendet \e[1;2A
auf unserem System, dann müssten Sie den entsprechenden Eintrag in neu definieren input-mode-map
:
(define-key input-decode-map "\e[1;2A" [S-up])
Grundsätzlich input-decode-map
sollte pro Endgerät eingestellt werden. In der Praxis gibt es sehr selten zwei Terminals, in denen dieselbe Escape-Sequenz unterschiedliche Schlüssel codiert, sodass eine globale Einstellung problemlos funktioniert.
Are the (define-key ...)
Kommandos sollen in init.el gehen? Gibt es ein detailliertes Beispiel, das ich mir ansehen kann?define-key
Befehle werden in Ihre Init-Datei eingefügt . Das können~/.emacs.d/init.el
oder ein paar andere Orte sein. Sie finden viele Beispiele für die Verwendung von,define-key
indem Sie suchendefine-key
, aber herauszufinden, welche Karte gebunden werden soll, ist eine andere Sache. Mehrere Karten beteiligt sind:global-map
,input-decode-map
,function-key-map
,keyboard-translate-map
. Ich weiß nicht, wie ich Ihre Frage beantworten soll, weil ich Spacemacs nicht kenne. Ich empfehle nicht die Verwendung von Paketen wie Spacemacs, die Standardschnittstellen chaotisch neu definieren.input-decode-map
nachdem ich einige Beispiele gefunden hatte. Kann ich annehmen, dass diesinput-decode-map
zutrifft, wenn der Benutzer Text in einen Puffer eingibt?input-decode-map
ist eine der zutreffenden Keymaps. Einzelheiten finden Sie im Handbuch .In Emacs wird die Region durch den Punkt (Cursor) und die Markierung (eine vorherige Position des Cursors, die "markiert" wurde) begrenzt.
Um eine Region auszuwählen, müssen Sie diese Markierung platzieren und dann Ihren Punkt verschieben.
Am einfachsten platzieren Sie die Marke durch Drücken von
C-SPC
. Bewegen Sie dann einfach den Mauszeiger, und Sie sehen, wie sich die "Region" erweitert.Zum "Abwählen der Region" können Sie
C-SPC
erneut drücken .Da "Shift + Bewegung" in anderen Programmen eine häufig verwendete Tastenkombination ist, wird standardmäßig dieses Verhalten "Bereich auswählen" emuliert. Im Terminal funktioniert dies jedoch nicht, da die Umschalttaste nicht als Zusatztaste an den Emacs gesendet werden kann.
Beachten Sie, dass die
C-SPC
Methode im Allgemeinen viel leistungsfähiger ist als andere Methoden zum Auswählen einer Region: Sie sind nicht auf Auf / Ab / Links / Rechts für die Bewegung beschränkt (Sie können beispielsweise die Suche verwenden ...), und dies ist nicht erforderlich dass Sie eine unangenehme Tastenkombination für lange Zeit beibehalten.quelle