Frage

Was ist der beste Weg zu einer bestimmten sehr langen Befehlszeile im Terminal zu bewegen?

Sagen, dass ich mit der Pfeiltaste verwendet oder Strg - R diese lange Befehlszeile zu erhalten:

./cmd --option1 --option2 --option3 --option4 --option5 --option6 --option7 --option8 --option9 --option10 --option11 --option12 --option13 --option14 --option15 --option16 --option17 --option18 --option19 --option20 --option21 --option22 --option23 --option24 --option25 --option26 --option27 --option28 --option29 --option30 --option31 --option32 --option33 --option34 --option35 --option36 --option37 --option38 --option39 --option40 --option41 --option42 --option43 --option44 --option45 --option46 --option47 --option48 --option49 --option50 

Jetzt muss ich bewegen (ab Anfang oder am Ende der Zeile), um den Cursor auf --option25 dort etwas zu ändern.

Was ist der schnellste Weg, um dorthin zu gelangen? Was ich in der Regel tun, ist Strg - A an den Anfang bekommen und dann wiederholt Alt - F vorwärts bewegen Wort für Wort (oder Strg - E , um das Ende und Alt gehen - B , um dann rückwärts) . Aber auf einer langen Linie, die zu viel Zeit in Anspruch nimmt. Es muss ein Weg sein, um zu suchen und direkt mit dem Teil muß ich ändern springen, z.B. option25?

War es hilfreich?

Lösung

Da dies noch nicht geschlossen worden ist, sind hier ein paar mehr Optionen.

  • Mit Strg + x gefolgt von Strg + e die aktuelle Zeile im Editor angegeben zu öffnen, indem $FCEDIT oder $EDITOR oder emacs (versucht, in dieser Reihenfolge).
  • Wenn Sie den Befehl früher laufen, schlug Strg + r für einen Reverse-Historiensuche und Typ option25 (in diesem Fall). Die Linie wird angezeigt. Hit Tab startet diesen Punkt Bearbeitung an.
  • Verwenden Geschichte Erweiterung mit dem s/// Modifikator. Z.B. !-2:s/--option25/--newoption/ würde den zweiten bis letzten Befehl erneut ausführen, aber ersetzen option25. Um den letzten ./cmd Befehl zu ändern, verwenden Sie die !string Syntax: !./cmd:s/--option25/--newoption/
    Jeder Begrenzer kann anstelle von / in der Substitution verwendet werden.
  • Wenn die vorhergehende Zeile bearbeiten, können Sie schnell Ersatz verwenden: ^--option25^--newoption
  • Zeichensuche. Dies wurde von Pax erwähnt, und kann in regelmäßigen Emacs-Modus mit Strg + ] für Vorwärtssuche und Strg + erfolgen Alt + ] für Rückwärtssuche.

Ich empfehle die zweite Option. Strg + r ist wirklich praktisch und schnell finden keine Ausmisten etwa mit Redakteuren, und Sie die Ergebnisse vor dem Befehl (im Gegensatz zu der Geschichte Erweiterungen) ausgeführt werden.

Andere Tipps

Um es klar, Sie wollen keinen „schnellen Weg, um die Cursor auf einer Terminal Befehlszeile zu bewegen“. Was Sie wirklich wollen, ist ein schneller Weg, über Kommandozeile zu navigieren in Sie Shell Programm.

Bash ist sehr häufig Schale, zum Beispiel. Es verwendet Readline Bibliothek Befehlszeileneingabe zu implementieren. Und so zu sagen, es ist sehr bequem Readline-Bindungen zu wissen, da es in der Bash nicht nur verwendet wird. Zum Beispiel gdb verwendet auch Readline-Eingabe zu verarbeiten.

In Readline-Dokumentation können Sie alle Navigationsbezogene Bindungen (und mehr) finden: http://www.gnu.org/software/bash/manual /bash.html#Readline-Interaction

Kurz copy-paste, wenn der Link oben geht:

Vorstellung

  • Ctrl-b Verschieben ein Zeichen zurück.
  • Strg-f Verschieben ein Zeichen weiter.
  • [DEL] oder [Backspace], um das Zeichen links vom Cursor löschen.
  • Ctrl-d das Zeichen unter dem Cursor löschen.
  • Strg-_ oder C-x C-u den letzten Bearbeitungsbefehl rückgängig. Sie können den ganzen Weg zurück in eine leere Zeile rückgängig gemacht werden.

Bewegung

  • Strg-a Gehen Sie zum Anfang der Zeile.
  • Strg-e Gehen Sie zum Ende der Zeile.
  • Meta-f vorwärts zu bewegen ein Wort, in dem ein Wort aus Buchstaben und Ziffern besteht.
  • Meta-b nach hinten bewegen Wort.
  • Strg-l auf den Bildschirm löschen, um die aktuelle Zeile an der Spitze des Nachdruck.

Tötung und zerren

  • Ctrl-k töten den Text aus der aktuellen Cursorposition bis zum Ende der Zeile.
  • M-d vom Cursor bis zum Ende des aktuellen Wortes töten, oder, wenn zwischen den Worten, bis zum Ende des nächsten Wortes. Wortgrenzen sind die gleichen wie diejenigen, die von M-f.
  • M- [DEL] tötet aus dem Cursor den Anfang des aktuellen Wortes oder, wenn zwischen Worten zu Beginn des vorherigen Wortes. Wortgrenzen sind die gleichen wie diejenigen, die von M-b.
  • Strg-w Tötung von dem Cursor zum vorherigen Leerzeichen. Dies ist anders als M-, weil die Wortgrenzen unterscheiden.
  • Strg-y Yank der zuletzt getötet Text wieder in den Puffer an der Cursorposition.
  • M-y Drehen Sie den Kill-Ring, und zerren die neue Spitze. Sie können dies nur tun, wenn der vorherige Befehl C-y oder M-y ist.

M ist Meta-Taste. Für Max OS X Terminal können Sie „Use-Option als Meta-Taste“ in Einstellungen / Tastatur für das ermöglichen. Für Linux sein komplizierter.

Aktualisieren

Beachten Sie auch, dass Readline in zwei Modi betrieben werden:

  • Emacs-Modus (das ist die Standardeinstellung)
  • vi Modus

Bash Zum Umschalten vi-Modus zu verwenden:

$ set -o vi

Personaly ziehe ich vi-Modus, da ich vim für die Textbearbeitung verwendet werden.

Bonus

In macOS Terminal-App (und in iTerm auch) Sie können Wahltaste den Cursor zu bewegen (Cursor auf geklickt Position bewegen). Dies funktioniert sogar innerhalb vim.

Halten Sie die Wahltaste gedrückt und klicken Sie auf, wo Sie den Cursor verschieben möchten, und Terminal eilt den Cursor, dass genau an der Stelle.

Ich neige dazu, vi-Bearbeitungsmodus zu bevorzugen (da diese Tastenanschläge in meinen Rückenmark jetzt eingebettet sind (das Gehirn gar nicht), zusammen mit dem STRG-K, CTRL-X von Wordstar 3.3 :-) verwendet. Sie können die Befehlszeile set -o vi verwenden um es zu aktivieren (und zurückzukehren set -o emacs).

In Vi, es wäre (ESC-K auf die Linie zunächst natürlich aufstehen) "f5;;B" (ohne Anführungszeichen).

Natürlich müssen Sie verstehen, was auf der Linie ist mit diesem wegzukommen. Im Grunde ist es

f5 to find the first occurrence of "5" (in --option5).
;  to find the next one (in --option15).
;  to find the next one (in --option25).
B  to back up to the start of the word.

Lassen Sie uns sehen, ob die Emacs-Fans mit einer besseren Lösung kommen können, weniger als 5 Tastenanschläge (obwohl ich möchte nicht einen religiösen Krieg beginnen).

Haben Sie darüber nachgedacht, ob Sie würden vielleicht gefallen dieser horrend langen Befehl in ein Skript zu setzen? : -)

Eigentlich kann ich gehe eine besser als das: „3f5B“, um das dritte Auftreten von „5“, dann zurück bis zum Anfang des Wortes zu finden

.

Verwenden Sie Meta-b / Meta-f rückwärts / vorwärts jeweils durch ein Wort zu wechseln.

In OSX, Meta übersetzt ESC, die saugt.

Aber alternativ können Sie Terminaleinstellungen öffnen -> Einstellungen -> Profil -> Tastatur und prüfen „verwenden Sie die Option als Meta-Taste“

Nachdem Sie den Befehl einmal ausgeführt wird, führen fc

Es wird mit dem vorherigen Befehl starten $EDITOR, dann können Sie Ihre regelmäßigen Editor verwenden Sie den Befehl zu ändern. Wenn Sie speichern und zu beenden, wird die Datei ausgeführt werden.

.. aber wie Pax sagt - die Befehlszeile für die Bearbeitung absurd lange Linien nicht besonders gut ist - warum nicht den Befehl in ein Skript machen

?

Wenn Sie eine bestimmte Anzahl von Worten vorwärts bewegen wollen, schlagen M-<n> (M- ist für Meta und seine in der Regel der Escape-Taste), dann eine Reihe getroffen. Dieser sendet eine Wiederholung Argument readline, Sie können so wiederholen, was befehlen Sie wollen -. Wenn Sie nach vorne drücken Sie dann M-<n> M-f und der Cursor vorwärts bewegen <n> Anzahl von Wörtern wird hinwollen

z.

 $|echo "two three four five six seven"
 $ M-4
 (arg: 4) echo "two three four five six seven"
 $ M-f
 $ echo "two three four| five six seven"

So für Ihr Beispiel aus dem Cursor am Anfang der Zeile würden Sie treffen, M-26 M-f und Sie den Cursor an --option25| -oder vom Ende der Leitung M-26 M-b wäre würde Sie den Cursor an --|option25 setzen

Incremental Geschichte Suche

in Terminal eingeben:

gedit  ~/.inputrc

dann kopieren und einfügen und speichern

"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[C": forward-char
"\e[D": backward-char

alles, was Sie tun müssen, um einen vorherigen Befehl zu finden, ist die ersten 2 oder 3 Buchstaben und nach oben weisender Pfeil Sie nehmen dort schnell sagen geben sagen, ich will:

for f in *.mid ; do timidity "$f"; done

Alles, was ich tun müssen, ist geben Sie

fo

und drücken Sie Pfeil nach oben Befehl wird in Kürze erscheinen

Eine Option ist M-x shell in emacs zu verwenden. Das bietet alle Bearbeitungsmöglichkeiten und Tastenanschläge, die emacs hat, so C-s verwendet werden kann, um den Text option25, zum Beispiel zu suchen.

(Aber ich würde immer noch lieber in der realen Terminal-Shell sein statt, wenn jemand mich auf eine gute Suche und bearbeiten Einrichtungen verweisen.)

Mit der Maus

Manchmal ist der einfachste Weg, eine Kommandozeile zu bearbeiten ist mit einer Maus. Einige frühere Antworten geben einen Befehl Ihre aktuelle Zeile in Ihrem $ Editor zu öffnen. Für mich (ZHS mit grml config) ist diese Kombination Alt+e. Wenn Sie mit der Maus in Ihrem Editor aktivieren, können Sie davon Gebrauch machen.

Um die Maus in Vim zu aktivieren, fügen Sie diese zu Ihrem ~ / .vimrc

set mouse=a
set ttymouse=xterm2

Wenn Sie dann eine Textauswahl in Terminal tun wollen (statt die per Mausklick zu vim zugeben), Shift halten, wenn Sie auf; dies ist Terminal spezifische, natürlich.

Sysadmins sollten keine Angst vor der Maus.

In Cygwin können Sie eine solche Funktion mit der rechten Maustaste auf das Fenster aktivieren. Im Pop-up-Fenster, wählen Sie Optionen ... -> Maus -> activate Klicks Platz Befehlszeilen Cursor . -> Anwenden

Von nun an einfach die linke Maustaste zu klicken, an einer bestimmten Position in der Befehlszeile den Cursor dort platzieren.

zuerst: export EDITOR = 'nano -m'

dann: STRG + X STRG + E in Folge.

Sie aktuelle Zeile wird in der Nano-Editor öffnen mit der Maus aktiviert. Sie können in jedem Teil des Textes klicken und bearbeiten

Sie dann STRG + X zu verlassen und y Einsparung zu bestätigen.

habe ich ein Skript über die Befehlszeile Cursor bewegen sich auf Mausklick zu machen:

  1. Aktivieren xterm Maus-Tracking Berichterstattung
  2. Stellen Sie Readline- Bindings die Escape-Sequenz von Klicks
  3. erzeugt verbrauchen

Es kann auf Github

finden

Weitere Informationen über einen anderen Posten

Wird, wenn echo -e "\e[?1000;1006;1015h" # Enable tracking Druck Escape-Sequenzen auf Terminal arbeiten, wenn mit der Maus auf

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top