Como eu defino o comando editor para usar * only * para edição de linha de comando em zsh?

3

Quando pressiono Ctrl + x , Ctrl + e em zsh , posso editar o arquivo linha de comando atual em $EDITOR ou $VISUAL . No entanto, gostaria de usar nano e, para obter o realce de sintaxe para a sintaxe do shell, preciso passar -Y sh , pois nano não reconhece a sintaxe do shell automaticamente ao editar a linha de comando ( zsh cria /tmp/random-name sem uma extensão .sh para passar para nano ).

Eu posso executar

EDITOR='nano -Y sh'
VISUAL="$EDITOR"

e depois pressione Ctrl + x , Ctrl + e para obter o resultado desejado. No entanto, outros programas usam $EDITOR / $VISUAL também. Se eu definir $EDITOR / $VISUAL como acima, e então (por exemplo) git commit , a mensagem de confirmação será destacada como sintaxe do shell, o que eu quero evitar.

Eu também tentei

EDITOR='nano -Y sh' fc

que fez funcionar, no entanto, parece um pouco verboso para digitar cada vez (eu poderia colocá-lo em uma função embora). Além disso, fc prepopula a linha de comando com a linha de comando último histórico e, para usá-la, eu tenho que digitar o comando. Isso significa que não consegui digitar um longo comando em zsh e depois decidi editá-lo em nano como pude com o atalho do teclado.

Então, existe uma maneira de eu dizer zsh o editor / flags para usar somente para editar a linha de comando quando pressionar Ctrl + x , Ctrl + e que outros programas ignoram? Eu adoraria alguma variável de ambiente que eu pudesse definir em ~/.zshrc e depois esquecer.

    
por Timo 29.02.2016 / 21:49

2 respostas

4

A maneira universal de resolver todos os problemas do computador¹ é adicionar um nível de indireção.

Em vez de chamar edit-command-line , chame uma função de wrapper.

nano-command-line () {
  local VISUAL='nano -Y sh'
  edit-command-line
}
zle -N nano-command-line
bindkey '^X^E' nano-command-line

¹ Hipérbole.

    
por 01.03.2016 / 01:30
2

O script zle usa EDITOR ou VISUAL . Um método seria copiar esse script de qualquer lugar que ele ocultasse em $fpath para um diretório de funções personalizadas, editar o script para usar um nome de ambiente diferente e garantir que o diretório de funções personalizadas fosse chamado antes do diretório installed-with-zsh.

# in .zshrc, set something like
fpath=(~/.zsh/functions $fpath)

# then in the shell, something like
mkdir -p ~/.zsh/functions
cp /usr/share/zsh/*/functions/edit-command-line ~/.zsh/functions

Em seguida, edite o arquivo edit-command-line e especifique uma variável de ambiente diferente.

    
por 29.02.2016 / 21:59

Tags