Terminal Ubuntu - vai para a posição do cursor do mouse

1

Frequentemente realizo minhas experiências de pesquisa no meu terminal. O comando é muito longo e, muitas vezes, acho necessário alterar um parâmetro para a chamada. O problema é que a linha de chamada é longa e o parâmetro está, por exemplo, no meio da linha. Para substituir o parâmetro, devo manter a seta para a esquerda / seta para a direita até chegar ao ponto em que o parâmetro está, depois excluir e reescrever os caracteres.

Existe uma maneira de navegar na linha de comando do terminal usando a posição do cursor do mouse? Clicar no meio da linha não faz nada, é claro.

Exemplo:

Suppose I have, in the terminal:

~> runThisProgram(a,b,c,d,......,v,w,x,y,z).

Now I want to run it but with X instead of the parameter c. I have to go to the end of that line, keep pressing the left arrow until I reach the c, and then delete and write X. (or, symmetrically, go to the beginning of the line, keep pressing the right arrow until I reach the c and then delete and write X). Is there a command to just point at the 'c' position using my cursor and go there?

    
por TheNotMe 19.08.2017 / 15:21

4 respostas

3

Você pode mover a palavra por vez no shell: Alt + B move o cursor uma palavra para trás, Alt + F move uma palavra para frente. Alt + D apaga a palavra após o cursor. Mais combinações de hotkeys para bash são explicadas em o manual .

    
por 19.08.2017 / 15:37
1

Envolva-o em um script de shell simples e use as variáveis do shell para os parâmetros que você deseja ajustar:

#!/bin/sh

param_c=340

./myprogram 1 2 "$param_c" \
            4 5 6 7
    
por 19.08.2017 / 15:42
1

Existem várias maneiras de fazer o que você quer.

modo interativo

Shells modernos (e mais populares), como bash e zsh, usam a linha de leitura GNU como biblioteca de entrada. Consulte man 3 readline , seção Comandos de edição . Existem dois modos: emacs e vi.

Estilo do Emacs

set -o emacs

@ resposta do sebasth cobre esta parte.

CTRL + P (ou UP ): Último comando

ALT + B : palavra para trás

ALT + F : palavra encaminhada

ALT + D : Excluir a próxima palavra

ALT + retrocesso : Excluir a palavra anterior

CTRL + A : Início da linha

CTRL + E : Fim da linha

Estilo Vi

set -o vi

Pressione I para entrar no modo de inserção e ESC para entrar no modo de comando. Vá no modo de comando e, em seguida:

K : Último comando

B : palavra para trás

W : palavra encaminhada

DW : Excluir a próxima palavra

DB : Excluir a palavra anterior

0 : Início da linha

$ : Fim da linha

Usando um editor externo

fc irá colar seu último comando (você também pode especificar outro comando em seu histórico) em seu editor favorito (veja a variável $ EDITOR). O comando será executado ao sair do editor.

Quando a linha de comando começar a ficar mais longa e longa, talvez você queira usar um editor real em vez da linha de leitura do shell. Como bônus, você pode salvá-lo como um arquivo de script no seu disco.

Modifique apenas 1 parâmetro

Usar ^before^after permite substituir a string before por after .

Por exemplo:

abitbol@localhost $ echo 1 2 3 4 5 6 7 
1 2 3 4 5 6 7

abitbol@localhost $ ^3^42
echo 1 2 42 4 5 6 7 
1 2 42 4 5 6 7
    
por 20.08.2017 / 02:51
0

Parece que você está usando bash para poder usar uma função readline que define a variável READLINE_POINT , que é a posição do cursor de texto, para a coluna desejada. Uma maneira barata de encontrar a coluna seria selecionar (com o mouse) todo o texto desde o início da linha até a posição desejada e usar xsel para ler esta seleção.

Por exemplo, para testá-lo, vincule o caractere ! a uma função gotocolumn :

$ bind '-x "!":gotocolumn' 
$ gotocolumn(){ local x=$(xsel);READLINE_POINT=${#x}; }

Recupere uma linha longa, selecione alguns caracteres na frente, digite ! e o cursor será movido.

    
por 19.08.2017 / 16:09