Como navegar por comandos longos mais rapidamente?

136

Existe uma maneira de acelerar a navegação da CLI do Linux quando devo inserir comandos longos? Eu simplesmente uso setas agora e - se eu tiver um comando longo, leva algum tempo para ir do início do comando até o meio.

Existe uma maneira de, por exemplo, pular para o meio do comando sem usar setas?

Stann
fonte

Respostas:

174

Algumas ligações úteis de teclas de edição de linha fornecidas pela biblioteca Readline :

  • Ctrl-A: ir para o início da linha
  • Ctrl-E: ir para o final da linha
  • Alt-B: pular uma palavra para trás
  • Alt-F: pular uma palavra para a frente
  • Ctrl-U: excluir para o início da linha
  • Ctrl-K: excluir até o final da linha
  • Alt-D: excluir até o final da palavra
Adam Byrtek
fonte
7
+1 porque isso funciona mesmo quando, por alguns motivos, as teclas Ctrl não funcionam. Vale a pena notar, por screenusuários, Ctrl-A torna-se Ctrl-A A.
enzotib
3
Para desfazer uma exclusão (ou mover o texto excluindo-o), use Ctrl + Y.
Lekensteyn
7
Ctrl + Seta para a direita, Ctrl + Seta para a esquerda que vale a pena mencionar.
mac
3
No Ubuntu, usando o Gnome e o GnomeTerminal, Alt-Aabre o menu em vez de mover o cursor. Como você usa Alt-Acom o Gnome? Quero dizer, o Gnome é o padrão, então é provável que alguém que esteja lendo isso esteja executando um terminal no Gnome.
Jason
1
Se você estiver se conectando ao Ubuntu a partir do OS X sobre SSH, pode ser necessário usar "Esc" em vez de Ctrl, por exemplo, Esc-A, Esc-E e assim por diante. Isso é verdade para o iTerm e o Terminal.
Fred Clausen 28/01
77

Mais alguns atalhos daqui

Ctrl + a  go to the start of the command line
Ctrl + e  go to the end of the command line
Ctrl + k  delete from cursor to the end of the command line
Ctrl + u  delete from cursor to the start of the command line
Ctrl + w  delete from cursor to start of word (i.e. delete backwards one word)
Ctrl + y  paste word or text that was cut using one of the deletion shortcuts (such as the one above) after the cursor
Ctrl + xx  move between start of command line and current cursor position (and back again)
Alt + b  move backward one word (or go to start of word the cursor is currently on)
Alt + f  move forward one word (or go to end of word the cursor is currently on)
Alt + d  delete to end of word starting at cursor (whole word if cursor is at the beginning of word)
Alt + c  capitalize to end of word starting at cursor (whole word if cursor is at the beginning of word)
Alt + u  make uppercase from cursor to end of word
Alt + l  make lowercase from cursor to end of word
Alt + t  swap current word with previous
Ctrl + f  move forward one character
Ctrl + b  move backward one character
Ctrl + d  delete character under the cursor
Ctrl + h  delete character before the cursor
Ctrl + t  swap character under cursor with the previous one
karlacio
fonte
Obrigado por esta lista direta e sem bate-papo.
neverMind9
14

Se você é um usuário do vi [m] e do bash, pode ser útil fazer com que a readline (usada pelo bash) use a edição no estilo vi adicionando set editing-mode viaos seus arquivos ~/.inputrcou /etc/inputrc. Ou você pode simplesmente fazer com que o bash use a edição no estilo vi executando o comando bash set -o vi. Adicione o comando ao seu ~/.bashrcarquivo para tornar o comportamento persistente.

Se você é um usuário zsh, adicione bindkey -vao seu .zshrcarquivo para edição no estilo vi.


fonte
8

Não conheço uma maneira de pular especificamente para o meio sem usar as teclas do cursor. No entanto, posso recomendar o uso das teclas CTRL + do cursor para passar de branco para branco (ou seja, pular de uma palavra para outra).

Kory Wnuk
fonte
1

Crie o snippet de código abaixo em seu .bashrc. Ctrl-a pula para o início e pressionar Ctrl-a novamente pula para o meio.

jump_mid() {
    if [ "$READLINE_POINT" -eq "0" ]; then
        LEN=${#READLINE_LINE}
        POS=$(($LEN / 2))
        READLINE_POINT=$POS
    else
        READLINE_POINT=0
    fi
}
bind -x '"\C-a" : jump_mid'

Ou, se você quiser usar Ctrl-Something para pular diretamente para o meio, altere o código para:

jump_mid() {
    LEN=${#READLINE_LINE}
    POS=$(($LEN / 2))
    READLINE_POINT=$POS
}

E vincule-o a algo diferente de Ctrl-a.

marukse
fonte