Kopieren und Markieren in Bash wie in Emacs?

16

Ich möchte in der Lage sein, Text in der Befehlszeile in Bash mit denselben Tastaturbelegungen zu kopieren und einzufügen, die Emacs standardmäßig verwendet (z. B. mit C-spacefor set-mark, M-wum Text zu kopieren C-y, M-yeinzufügen usw.).

Die GNU Bash-Dokumentation besagt, dass Bash einige dieser Schlüsselbindungen enthält, die standardmäßig eingerichtet sind.

Zum Beispiel funktioniert yanking ( C-y) auf meinem Terminal standardmäßig. Allerdings kann ich nicht bekommen set-markund copyBefehle an die Arbeit, und sie scheinen nicht auf irgendwelche Tasten standardmäßig gebunden zu sein.

Normalerweise kann ein Benutzer seine eigenen Tastenkombinationen definieren, indem er sie hinzufügt .inputrc. Daher habe ich in der Dokumentation die folgenden Bash-Funktionen gesucht und gefunden, die mir vermutlich dabei helfen können, das von mir gewünschte Emacs-ähnliche Verhalten (dh set-markmit C-spaceund copymit M-w) zu definieren.

copy-region-as-kill ()

Kopieren Sie den Text in der Region in den Kill-Buffer, damit Sie sofort daran ziehen können. Standardmäßig ist dieser Befehl nicht gebunden.

und

set-mark (C-@)

Setzen Sie die Marke auf den Punkt. Wenn ein numerisches Argument angegeben wird, wird die Markierung auf diese Position gesetzt.

Wenn ich das richtig verstehe, bedeutet dies, dass das Gerät copy-region-as-killstandardmäßig nicht an eine Tastatursequenz set-markgebunden ist , während es standardmäßig an eine Tastatursequenz gebunden ist C-@.

Ich habe C-@mein Terminal ausprobiert , glaube aber nicht, dass es ausgeführt wird, set-markda beim Bewegen des Cursors kein hervorgehobener Text angezeigt wird. Auf jeden Fall habe ich versucht , den Funktionen und höher in my Tastaturbelegungen ( M-wund C-) hinzuzufügen und sie dann mit neu zu laden , aber das hat nicht funktioniert. Ich weiß, dass meine anderen Einträge in Arbeit sind, weil ich andere benutzerdefinierte Tastenkombinationen darin definiert habe.copy-region-as-killset-mark.inputrcC-x C-r.inputrc

Was mache ich falsch? Vermisse ich etwas?

Amelio Vazquez-Reina
quelle
Welche Version von bashund welches Terminalprogramm verwenden Sie?
Mikel
Ich verwende GNU bash, Version 3.1.17 (1) -release (x86_64-redhat-linux-gnu) auf dem Gnome-Terminal (auch auf Terminator)
Amelio Vazquez-Reina

Antworten:

11

Es hebt die Auswahl nicht hervor, aber ansonsten denke ich, dass es gut funktioniert.

Versuche zu rennen

$ bind -p | grep copy-region-as-kill

um sicherzustellen, dass das C-x C-rtatsächlich funktioniert hat.

Es sollte heißen:

"\ew": copy-region-as-kill

Danach sollte es gut funktionieren.

Beispiel:

$ abc<C-Spc><C-a><M-w> def <C-y>

gibt mir

$ abc def abc

Wenn Sie jemals wissen wollen, wo es markist, tun Sie es einfach C-x C-x.

Beispiel:

$ <C-Spc>abc<C-x><C-x>

Setzt den Cursor wieder an die Stelle, an der Sie die Markierung gesetzt haben (den Anfang der Zeile).

Ich glaube auch nicht, dass Sie die set-markBindung hinzufügen müssen . Habe ich nicht.

$ bind -p | grep set-mark
"\C-@": set-mark
"\e ": set-mark
# vi-set-mark (not bound)

(Beachten Sie, dass die meisten Terminals senden, C-@wenn C-Spcgedrückt wird. Ich gehe davon aus, dass dies auch bei Ihnen der Fall ist.)

Wenn dies alles fehlschlägt:

  • tut Ctrl+ SpaceArbeit in emacs -nwauf dem gleichen Endgerät?
  • funktionieren andere Alt/ MetaVerknüpfungen in Bash?
Mikel
quelle
1
Vielen Dank! Ich hatte "Mw" anstelle von "\ ew" in .inputrc. Das Fehlen von Hervorhebungen verwirrte mich auch. Danke übrigens für den Zeiger auf den Bindebefehl. Es funktioniert jetzt wie ein Zauber!
Amelio Vazquez-Reina
2
Herzlich willkommen! Ja, du musst schreiben \eoder \M-. Siehe readline init-Dateisyntax .
Mikel
Was für eine großartige Antwort! Vielen Dank. Dies hat ähnliche Probleme für mich geklärt: D
Ephsmith
set-mark und copy-region-as-kill arbeiten still, kann ich die region markieren (wie in emacs)?
Mosh
4

Ich binde auch Cw für die Kill-Region . Hier meine .inputrc:

# Siehe http://lists.gnu.org/archive/html/bug-bash/2009-03/msg00033.html
setze bind-tty-special-chars auf off

# Definieren Sie meine bevorzugten Emacs-Tastenzuordnungen.
"\ C- @": set-mark
"\ Cw": Kill-Region
"\ Mw": Kopierbereich als Abtötung
"\ M- /" dabbrev-expand
gavenkoa
quelle