Warum kann ich Shift- <Rücktaste> nicht binden?


8

Mein System ist debian keuchend, ich habe Folgendes versucht

(global-set-key (kbd "S-<backspace>") 'evil-shift-left-line)
(global-set-key (kbd "<S-backspace>") 'evil-shift-left-line)
(define-key global-map [S-backspace] 'evil-shift-left-line)

Was ich will, ist im bösen Einfügemodus. Ich kann eine Tabulatorbreite vorwärts löschen, anstatt viermal die Rücktaste zu drücken. Die Tastenkombination funktioniert auf meinem Laptop, aber nicht auf meinem Desktop. Ich überprüfe die Bindung auf böse Linksverschiebung, sie hat sich geändert, funktioniert aber nicht und die Hilfe bei "Rücktaste verschieben" zeigt nur "Rücktaste" an. Shift do wirkt sich jedoch auf "Rücktaste" aus, "Shift-Backspace" löscht das vorherige Wort anstelle des Zeichens.

Wenn ich nach "Cq" "Shift-Backspace" einfüge, hat es die gleiche Notation "^?" als "Rücktaste" auf meinem Desktop, während auf meinem Laptop der erstere "^ @" ist.

Irgendwelche Ideen, warum es auf meinem Desktop nicht funktioniert? Danke für deine Hilfe!

Diese Frage kann mit dieser zusammenhängen: Shift + Up wird von Emacs in einem Terminal nicht erkannt


2
Verwenden Sie Emacs auf einem Terminal?
Malabarba

Nein, ich benutze die eigenständigen Emacs.
godblessfq

Antworten:


6

Interessanterweise können Sie versuchen, den deletechar Pseudoschlüssel zu binden .

Wenn ich die Bindung von backspaceauf meinem Computer mit überprüfe C-h k [backspace], erhalte ich:

DEL(übersetzt von <backspace>) führt den Befehl aus ... (bla bla bla)

Wenn ich die Bindung von shift+ backspaceauf meinem Computer mit überprüfe C-h k S-[backspace], erhalte ich:

<deletechar>(übersetzt von <delete>) führt den Befehl aus ... (bla bla bla)

Folgendes funktioniert daher auf meinem Computer:

(global-set-key [deletechar] #'evil-shift-left-line)

Wenn ich auf meinem Computer überprüfe, ist die Bindung der Umschalttaste + <Rücktaste> <Rücktaste>.
godblessfq

2

Ich habe dies in meinem Setup:

(define-key global-map [(shift backspace)] 'backward-delete-whitespace)
(define-key global-map [(shift delete)] 'forward-delete-whitespace)

Um Shift + Backspace / Shift + Delete zu machen, töte alle Leerzeichen.


Und für den Fall, dass jemand diese Funktionen benötigt, sind sie hier:

(defun backward-delete-whitespace ()
  (interactive)
  (let ((p (point)))
    (re-search-backward "[^ \t\n]+" nil t)
    (forward-char)
    (delete-region p (point))))

(defun forward-delete-whitespace ()
  (interactive)
  (re-search-forward "[ \t\n]+" nil t)
  (replace-match "" nil nil))

1

Ich bin jetzt mit dieser Einstellung zufrieden.

(defun my/backspace()
  (interactive)
  (if (string-match "[^[:space:]]+"
                    (buffer-substring-no-properties
     (line-beginning-position) (point))) ;; return nil no match
      (backward-kill-word 1)(evil-shift-left-line)))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.