Para ser claro, você não deseja uma "maneira rápida de mover o cursor em uma linha de comando do terminal ". O que você realmente deseja é uma maneira rápida de navegar pela linha de comando no seu programa de shell .
Bash é um shell muito comum, por exemplo. Ele usa a biblioteca Readline para implementar a entrada da linha de comando. E por assim dizer, é muito conveniente conhecer as ligações Readline, pois elas são usadas não apenas no bash. Por exemplo, o gdb também usa o Readline para processar a entrada.
Na documentação do Readline, você pode encontrar todas as ligações relacionadas à navegação (e mais):
http://www.gnu.org/software/bash/manual/bash.html#Readline-Interaction
Cópia-colar curta, se o link acima ficar inativo:
Puramente essencial
- Ctrl-b Retrocede um caractere.
- Ctrl-f Avança um caractere.
- [DEL] ou [Backspace] Exclua o caractere à esquerda do cursor.
- Ctrl-d Exclui o caractere abaixo do cursor.
- Ctrl-_ ou Cx Cu Desfaz o último comando de edição. Você pode desfazer todo o caminho de volta para uma linha vazia.
Movimento
- Ctrl-a Mover para o início da linha.
- Ctrl-e Mover para o final da linha.
- Meta-f Avança uma palavra, onde uma palavra é composta de letras e dígitos.
- Meta-b Retrocede uma palavra.
- Ctrl-l Limpa a tela, reimprimindo a linha atual na parte superior.
Matar e puxar
- Ctrl-k Mata o texto da posição atual do cursor até o final da linha.
- Md Mate do cursor até o final da palavra atual ou, se estiver entre as palavras, até o final da próxima palavra. Os limites de palavras são os mesmos que os usados por Mf.
- M- [DEL] Mate do cursor o início da palavra atual ou, se houver entre as palavras, o início da palavra anterior. Os limites de palavras são iguais aos usados por Mb.
- Ctrl-w Mata do cursor para o espaço em branco anterior. Isso é diferente de M- porque os limites das palavras diferem.
- Pressione a tecla Ctrl e puxe o texto morto mais recentemente de volta para o buffer no cursor.
- Meu Gire o anel da morte e arranque o novo topo. Você só pode fazer isso se o comando anterior for Cy ou My.
M é a tecla Meta. Para o Max OS X Terminal, você pode ativar "Usar opção como meta-chave" em Configurações / teclado para isso. Para Linux é mais complicado.
Atualizar
Observe também que o Readline pode operar em dois modos:
- modo emacs (que é o padrão)
- modo vi
Para alternar o Bash para usar o modo vi:
$ set -o vi
Pessoalmente, prefiro o modo vi, pois uso o vim para edição de texto.
Bônus
No aplicativo macOS Terminal (e no iTerm também), você pode clicar com a tecla Option pressionada para mover o cursor (o cursor se moverá para a posição clicada). Isso até funciona por dentro vim
.
Mantenha pressionada a tecla Opção e clique no local em que deseja mover o cursor, e o Terminal direciona o cursor para o local preciso.
fonte
Eu tendem a preferir o modo de edição vi (já que essas teclas estão incorporadas na minha medula espinhal agora (o cérebro não é usado de todo), juntamente com o CTRL-K, CTRL-X do WordStar 3.3 :-). Você pode usar a linha de comando
set -o vi
para ativá-lo (eset -o emacs
reverter).No Vi, seria (ESC-K para alinhar primeiro, é claro) "
f5;;B
" (sem as aspas duplas).Claro, você precisa entender o que está em jogo para se safar disso. Basicamente, é
Vamos ver se os aficionados do emacs podem encontrar uma solução melhor, menos de cinco pressionamentos de tecla (embora eu não queira começar uma guerra religiosa).
Você já pensou se gostaria de colocar esse comando horrendamente longo em um script? :-)
Na verdade, eu posso ir melhor do que isso: "
3f5B
" para encontrar a terceira ocorrência de "5" e voltar ao início da palavra.fonte
Use Meta-b / Meta-f para retroceder / avançar uma palavra, respectivamente.
No OSX, o Meta se traduz como ESC, o que é péssimo.
Mas como alternativa, você pode abrir as preferências do terminal -> configurações -> perfil -> teclado e marcar "usar opção como meta-chave"
fonte
Depois de executar o comando uma vez, execute
fc
Ele será iniciado
$EDITOR
com o comando anterior, e você poderá usar seu editor regular para modificar o comando. Quando você salva e sai, o arquivo será executado...mas, como Pax disse - a linha de comando não é particularmente boa para editar linhas absurdamente longas - por que não transformar o comando em um script?
fonte
Se você quiser avançar um certo número de palavras, pressione
M-<n>
(M-
é para Meta e geralmente é a tecla de escape) e pressione um número. Isso envia um argumento de repetição para a linha de leitura, para que você possa repetir qualquer comando que desejar - se quiser avançar, pressioneM-<n> M-f
e o cursor avançará o<n>
número de palavras.Por exemplo
Portanto, para o seu exemplo, a partir do cursor no início da linha que você tocaria,
M-26 M-f
e o cursor estaria no--option25|
- ou - no final da linhaM-26 M-b
, colocaria o cursor em--|option25
fonte
Pesquisa de histórico incremental
no terminal digite:
copie e cole e salve
tudo o que você precisa fazer para encontrar um comando anterior é digitar, digamos, as primeiras 2 ou 3 letras e a seta para cima o levará até lá rapidamente, dizendo que eu quero:
tudo o que eu preciso fazer é entrar
e pressione o comando seta para cima aparecerá em breve
fonte
Uma opção é o uso
M-x shell
ememacs
. Isso fornece todos os recursos de edição e pressionamentos de teclas queemacs
possuem, portanto,C-s
pode ser usado para pesquisar o textooption25
, por exemplo.(Mas eu ainda preferiria estar no shell de terminal real, se alguém puder me indicar boas instalações de pesquisa e edição.)
fonte
Use o mouse
Às vezes, a maneira mais fácil de editar uma linha de comando é usando o mouse. Algumas respostas anteriores fornecem um comando para abrir sua linha atual no seu $ EDITOR. Para mim (zhs com grml config) essa combinação é
Alt+e
. Se você ativar o mouse no seu editor, poderá utilizá-lo.Para ativar o mouse no Vim, adicione-o ao seu ~ / .vimrc
Se você quiser fazer uma seleção de texto no terminal (em vez de passar o mouse para o vim), mantenha pressionada a tecla Shift ao clicar; isso é específico do terminal, é claro.
Os administradores de sistemas não devem ter medo do mouse.
fonte
No Cygwin, você pode ativar esse recurso clicando com o botão direito do mouse na janela. Na janela pop-up, selecione Opções ... -> Mouse -> ativar Cliques posicionar o cursor da linha de comando -> Aplicar.
A partir de agora, basta clicar no botão esquerdo do mouse em alguma posição na linha de comando para colocar o cursor lá.
fonte
primeiro: exportar EDITOR = 'nano -m'
então: CTRL + X CTRL + E em sequência.
Sua linha atual será aberta no editor nano com o mouse ativado. Você pode clicar em qualquer parte do texto e editar
CTRL + X para sair e y para confirmar o salvamento.
fonte
Eu criei um script para fazer o cursor da linha de comando se mover com o clique do mouse :
Pode ser encontrado no github
Mais informações em outra postagem
Funcionará se
echo -e "\e[?1000;1006;1015h" # Enable tracking
imprimir sequências de escape no terminal ao clicar com o mousefonte
Pode não ser o mais rápido, mas isso precisa estar aqui, algumas leituras sobre os movimentos do cursor ANSI
As seqüências de escape ANSI permitem que você mova o cursor pela tela à vontade. Isso é mais útil para interfaces de usuário de tela cheia geradas por scripts de shell, mas também pode ser usado em prompts . As seqüências de escape de movimento são as seguintes:
(...)
Tente inserir a seguinte linha de código no prompt (é um pouco mais claro o que ele faz se o prompt estiver várias linhas no terminal quando você o inserir):
echo -en "\033[7A\033[1;35m BASH \033[7B\033[6D"
Isso deve mover o cursor na tela de sete linhas, imprima a palavra "BASH "e, em seguida, retorne ao local onde começou a produzir um prompt normal.Exemplos :
Mova o cursor para trás 7 linhas:
Mova o cursor para a linha 10, coluna 5:
Faça eco rapidamente dos códigos de cores para colorir um programa:
fonte