zsh line editor: Posso navegar e editar por argumento?

2

Eu tenho uma situação comum no shell quando um comando é tentado

command "/some/complex/and terrible/path" -vf --various --flags --and -- things --config-file="/some other/annoyingly/large/path/to/somewhere"

e acontece que eu estou principalmente lá, mas preciso mover algumas coisas. Suponha que eu tenha que mover o último argumento até a frente para tentar isso em seguida.

command --config-file="/some other/annoyingly/large/path/to/somewhere" "/some/complex/and terrible/path" -vf --various --flags --and -- things

Tentando dar uma olhadinha no golfe, é uma situação terrível. Este é realmente um cenário de entrada de comando de shell pesadelo onde você meio que tem que redigitar (ou copiar e colar) quase metade do comando. A melhor esperança de sanidade pode ser usar um editor externo [assim] .

Mesmo assim, o Vim não é inteligente o suficiente para fazer a análise de argumentos (portanto, não há maneira rápida de extrair o último argumento usando, por exemplo, daW , embora seja possível concluir o trabalho dentro de 8 pressionamentos de tecla .)

Eu acho que isso pode ser uma solução decente, porque eu trago muito software para editar texto no meu editor de texto de terminal.

Mas o que eu quero é que o editor de linhas Zsh (ou até mesmo o Bash!) possa ser programado de alguma forma para que eu tenha um zle bind que pode empurrar um argumento ao redor. Mais ou menos assim: link Mas é claro, este plugin não funciona em argumentos de shell delimitados por espaço.

Eu ficaria feliz com um salto direcional (para que eu possa colocar meu cursor em algum lugar no --config-file arg e, em seguida, amassar HopLeft para hop o arg para a esquerda) ou um yank & cole (para que eu possa colocar meu cursor em algum lugar no arquivo --config-file arg, arranca-o, bata em casa para ir para a frente e cole depois dele).

Dessa forma, podemos recompor rapidamente os argumentos do shell navegando os argumentos como uma unidade, em vez de navegar pelos caracteres individuais como uma unidade.

Se quisermos levar a ideia adiante, isso seria implementado como um editor mode , vamos chamá-lo de Modo de Edição de Argumento, onde o cursor se move através de args ao invés de caracteres e um conjunto mais desenvolvido de ações pode ser executado em args como uma unidade.

Vamos voltar à terra agora. A pergunta é a seguinte: posso fazer com que o zsh exclua o argumento de shell no qual estou atualmente? E depois colá-lo de volta? Posso ligar uma chave para me deixar hop baseado em argumentos reais em vez de apenas pular palavras?

Parece não haver links prontos para uso para uso com bindkey , mas parece que pode haver uma maneira de fazer isso se eu puder controlar programaticamente a posição do cursor. Eu uso um plugin que pode viver sintaxe destacar meu comando depois de tudo. link

    
por Steven Lu 16.01.2018 / 21:03

1 resposta

0

Você pode estar procurando a estrutura select-word-style e, em particular, seu estilo de palavra shell . Veja

info zsh select-word-style

Por exemplo, adicione ao seu ~/.zshrc :

autoload -U select-word-style
zle -N select-word-style
bindkey '\ez' select-word-style

Então (supondo que você use o modo emacs )

  • pressione Alt + Z para invocar select-word-style
  • você terá um menu onde poderá selecionar o estilo da palavra. Pressione S para o estilo de palavra shell .
  • então Ctrl + W irá apagar a palavra anterior como um argumento completo (uma palavra shell ).
  • Ctrl + A ou Início para ir ao início da linha
  • Alt + F para mover uma palavra para a direita
  • Ctrl + Y para arrancar a palavra anteriormente morta.
  • Alt + Z N se você quiser voltar ao estilo de palavra normal .
por 17.01.2018 / 23:33