5 Stimmen

Änderung des Verhaltens von backward-word und backward-kill-word

Ich habe ein kleines Problem mit der Art und Weise, wie die Befehle "backward-word" und "backward-kill-word" funktionieren. Wenn ich in einer Zeile, die nur aus Leerzeichen besteht (z. B. das erste Zeichen einer eingerückten Zeile), auf "backward-kill-word" drücke, löscht der Befehl alle Leerzeichen und auch das letzte Wort der vorherigen Zeile.

Dieses Verhalten ist für mich völlig unintuitiv. Ich bevorzuge zum Beispiel die Funktionsweise von Eclipse, das beim ersten Drücken von "backward-kill-word" die Leerzeichen bis zum Zeilenanfang löscht, beim nächsten Drücken zum Ende der vorherigen Zeile springt und erst dann damit beginnt, Wörter am Ende der Zeile zu löschen.

Ich bin mir ziemlich sicher, dass dieses Verhalten in den meisten Anwendungen Standard ist (da es intuitiver zu sein scheint, was wahrscheinlich daran liegt, dass ich daran gewöhnt bin, aber ich bin mir nicht sicher), also frage ich mich, ob es eine Möglichkeit gibt, Emacs so zu konfigurieren, dass es dieses Verhalten auch hat. Ein paar Suchen bei Google haben leider nichts ergeben.

Gracias

EDIT:

Vielen Dank für die Antworten (einschließlich des Elisp-Codes, der genau das tut, wonach ich gefragt habe).

Das gleiche Problem tritt natürlich auch bei forward-kill-word und den Bewegungsbefehlen auf, und ich hatte gehofft, dass es ein konfigurierbares Flag in emacs gibt, um das Verhalten zu ändern, aber es sieht so aus, als würde ich einfach diese elisp-Funktionen nehmen und die Standard-Bewegungs- und Tötungsbefehle für diese neu binden.

0voto

Sie können einige Funktionen von viper wiederverwenden, um das gewünschte Verhalten zu erreichen:

(setq viper-mode nil)
(require 'viper)

(defun viper-delete-word (arg)
  "Delete word."
  (interactive "p")
  (save-excursion
    (push-mark nil t)
    (viper-forward-word arg)
    (delete-region (point) (mark t))
    (pop-mark)))

(defun viper-delete-backward-word (arg)
  "Delete previous word."
  (interactive "p")
  (save-excursion
    (push-mark nil t)
    (viper-backward-word arg)
    (delete-region (point) (mark t))
    (pop-mark)))

(global-set-key [C-left] 'viper-backward-word)
(global-set-key [C-right] 'viper-forward-word)
(global-set-key [C-delete] 'viper-delete-word)
(global-set-key [C-backspace] 'viper-delete-backward-word)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X