Diferentes delimitadores para o movimento da palavra bash

1

Eu estou procurando por um atalho do tipo emacs bash para mover o cursor backword um determinado número de argumentos na linha de comando. Para ilustrar o que estou procurando, usarei um exemplo específico (em que [] é o cursor):

START: $ prog -v a/b/c d/e/f[]

OBJETIVO: $ prog -[]v a/b/c d/e/f ou $ prog -v[] a/b/c d/e/f

Idealmente, gostaria de informar ao bash de forma eficiente para mover o cursor de volta para os argumentos n , onde um argumento é uma cadeia contínua de caracteres que não são espaços em branco.

O que eu tentei:

  • Sentado na seta para a esquerda por tempo suficiente me leva para onde eu quero estar, mas é ineficiente.

  • C-a , então sentando na seta para a direita por tempo suficiente. Também ineficaz.

  • M-b volta o que readline considera ser uma "palavra", que na prática parece parar em espaços, barras e traços. Mas, eu só quero que ele pare em caracteres de espaço em branco. Para o exemplo dado, eu teria que usar Mb + Mb + Mb + Mb + Mb + Mb + Mb para chegar onde quero ir, em vez das minhas duas vezes desejadas.

  • M-7 + Mb faz Mb sete vezes, então aumenta a eficiência, mas requer que o poder do cérebro conte o número de separadores "word". É muito mais fácil para mim contar os intervalos de espaço em branco em vez de qualquer outra linha de leitura que considere como delimitadores de "palavra".

Idealmente, eu poderia especificar o número de argumentos para voltar e, em seguida, dizer-lhe para voltar; algo como M-2 + M-b .

@ m0dular apontou que no modo vi, B trata limites de argumentos como eu esperava, mas gostaria de ficar no modo emacs e gostaria de estar capaz de especificar o número de argumentos para voltar sem repetir o próprio comando de retorno.

Nota: eu originalmente publiquei uma versão deste no StackOverflow, mas como não é diretamente relacionado à programação, eles sugeriram que eu viesse aqui.

    
por pcronin 07.02.2018 / 17:31

3 respostas

1

Você sempre pode vincular vi-backward-bigword a Alt + B (e vi-forward-bigword em Alt + F ) para ter o comportamento esperado (mesmo que em zsh , que também permite escolher entre diferentes estilos de palavras:

bind '"\eb": vi-backward-bigword'
bind '"\ef": vi-forward-bigword'

E então você pode usar Alt + 2 Alt + B .

Há também shell-backward-word e shell-forward-word que pulam os tokens de shell. Por exemplo, em:

cmd "first arg" $(echo second third)

"first arg" , $( , echo , second , third e ) são todos os tokens de shell. Se você citar essa substituição de comando (como geralmente deseja), ela se torna um token de shell.

    
por 08.02.2018 / 15:42
1

O mais próximo que eu posso entrar com os atalhos de teclado do modo emacs da biblioteca readline seria Ctrl - Meta - ] , v para procurar para trás por v e colocar o cursor lá. Você também pode procurar a partir da posição do cursor com Ctrl - ] , v se o cursor estiver no início da linha.

    
por 07.02.2018 / 17:49
1

Esta é realmente uma questão sobre como navegar usando readline , o modo padrão para o qual é o movimento no estilo emacs. Você pode estar interessado em fazer set -o vi para vi keybindings.

No seu exemplo com set -o vi , você pode:

Esc F - -

ou: Esc F - v

Ou simplesmente mantenha o B até que o cursor esteja onde você quer. Ou apenas tecle Esc - v para editar seu comando em vim e :wq para executá-lo. As possibilidades são infinitas, realmente.

    
por 07.02.2018 / 18:24

Tags