C'è un modo per passare a una parte precedente di un comando da riga di comando nel Terminale Mac?


9

Mi ritrovo spesso a scrivere lunghi comandi nella shell bash - cose con molti argomenti, indirizzi web, percorsi, ecc. E così via. Ogni tanto mi rendo conto di aver dimenticato, per esempio, di mettere il mio "bundle exec" all'inizio del comando, o di aver sbagliato a scrivere qualcosa o di aver dimenticato le virgolette. O qualcosa semplicemente come mettere "cd" invece di "vim".

Inizia così il noioso processo di tenere premuto il tasto freccia sinistra fino a quando non torno all'inizio del comando.

C'è un modo per saltare di nuovo all'inizio della riga?


2
Potresti voler sbarazzarti dell'app terminal predefinita e scaricare iTerm
Clement Herreman,

Perché? Ho appena controllato e sembra che si comporti praticamente allo stesso modo. (La chiave home funziona, ora, ma dal momento che ho le altre chiavi non importa davvero). Cosa offre che varrebbe la pena rifare tutte le mie impostazioni, configurazioni e attività e quant'altro?
GlyphGryph,

Sembra qualcosa che puoi configurare con .inputrc
Rob,

Inoltre, per saltare una parola alla volta, usa ⌥B e ⌥F per saltare avanti e indietro, rispettivamente.
fideli,

@fideli, ma solo se hai abilitato “Usa opzione come meta chiave”. Nota che a partire da Mac OS X Lion 10.7, le impostazioni predefinite della tastiera del Terminale mappano Opzione-Freccia sinistra / Freccia destra su Esc-b / f, quindi non è necessaria alcuna configurazione.
Chris Page

Risposte:


12

Oltre a ^ A e ^ E, puoi farlo

  • Esc- bper saltare indietro di una parola
  • Esc- fper saltare in avanti di una parola
  • Ctrl- bper tornare indietro di un personaggio
  • Ctrl- fper avanzare di un personaggio

Vedi il manuale di bash per i comandi per lo spostamento .


Una cosa da notare: questo viene da Emacs e aggiungendo l' emacsopzione ai tuoi shellopts puoi ottenere qualcosa in più.
TC1,

6

Puoi usare i comandi Emacs, ad esempio:

  • ctrl-A per andare all'inizio della riga di comando
  • ctrl-E per andare alla fine della riga di comando

Questo è bash, non specifico per Mac.


3
set -o vi

Quindi Escseguito da

^inizio riga $fine riga buna parola backword wuna parola avanti


Sono un grande fan di Vim, quindi il principio della tua risposta è ottimo per me, ma la modifica modale della riga di comando potrebbe essere un po 'confusa per l'OP, soprattutto senza menzionare come tornare a poter scrivere! Tornare alla modalità di inserimento utilizzando i(inserisci) per digitare prima del cursore o a(aggiungi) per digitare dopo il cursore.
Cascabel,

Ho usato vi come editor di testo principale per decenni, ma preferisco ancora i collegamenti chiave di emacs per la mia shell.
Keith Thompson,

In realtà, l'OP utilizza vim per tutte le modifiche al testo, quindi sapere che è possibile impostare gli standard vi è incredibilmente utile. Molte grazie!
GlyphGryph,

@Kieth Thompson: pensavo lo stesso. Ho solo pensato che la shell non si mescolasse bene con questa modalità che cambia roba (come il vtasto irritante in modalità vi). Ma dopo un po 'ho appena infettato VIM, quindi ti consiglio di provarlo: P
kizzx2,

1

Questo non risponde alla tua domanda ma in alcuni casi può risolvere il tuo problema.

bashNel !!token viene sostituito con il comando precedente. Quindi, se dimentichi di aggiungere qualcosa all'inizio di un comando (come sudo), puoi fare qualcosa del genere

# ./super_secret_command --with-args
=> ACCESS DENIED

# sudo !!
sudo ./super_secret_command --with-args
=> ACCESS GRANTED

0

È possibile configurare le Ctrl/Opt+Left/Rightscorciatoie regolari da utilizzare in Terminale. In questo modo, non è necessario riapprendere tutto quando si utilizza Terminal.

Apri Terminale »Preferenze ...» Impostazioni »(seleziona un profilo)» Tastiera .

Lì, assegna le seguenti scorciatoie:

  • Control + Cursor Left: Invia una stringa \033[1~alla shell
  • Control + Cursor Right: Invia una stringa \033[4~alla shell
  • Option + Cursor Left: Invia una stringa \033[5Dalla shell
  • Option + Cursor Right: Invia una stringa \033[5Calla shell

Mi piace anche il seguente ( Fn + Left/Right):

  • Home: Invia una stringa \033[1~alla shell
  • End: Invia una stringa \033[4~alla shell

inserisci qui la descrizione dell'immagine


Su Lion ⌥ ← e ⌥ → sono associati M-be M-fpredefiniti. E ⌃ ← e ⌃ → sono le scorciatoie predefinite per cambiare spazio.
Lri,

0

Ne avevo bisogno in Cygwin, non in un Mac, ma l'aggiunta di quanto segue ~/.inputrcpuò aiutare anche:

"\e[1;5C": forward-word   # ctrl + right
"\e[1;5D": backward-word  # ctrl + left 

0

Non sono un utente Mac ma per quanto riguarda la Homechiave? Funziona bene su un terminale Linux.


1
No, scorre fino alla cima della finestra del terminale.
GlyphGryph,

Per impostazione predefinita, Home ed End fanno scorrere la vista, che è il comportamento standard del Mac. Per impostazione predefinita, Shift-Home e Shift-End inviano rispettivamente “ESC [H” e “ESC [F”. Questi sono tutti personalizzabili in Terminale> Preferenze> Impostazioni> [profilo]> Tastiera .
Chris Page

0

Il modo migliore per spostarsi nella riga di comando in Mac Os X è utilizzare il mio profilo: https://github.com/lingtalfi/mac-terminal-shortcuts

Fornisce le seguenti scorciatoie (intuitive):

ALT-left: move one word backward
ALT-right: move one word forward
CTRL-left: move to the beginning of the line
CTRL-right: move to the end of the line
ALT-backspace: kill one word backward
ALT-del: kill one word forward
ALT-up: set word after cursor to uppercase
ALT-down: set word after cursor to lowercase
home: move to the beginning of the line
end: move to the end of the line    
CTRL-backspace: Same as ALT-backspace
CTRL-del: Same as ALT-del
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.