coloque a versão com alias de um comando existente em / usr / bin /

3

Eu uso Vim muito, e sei como posso iniciar o vim no modo de inserção . Então eu tenho um alias chamado vii no meu arquivo .bash_aliases .

Por outro lado, eu também uso o Git , e eu tenho essa linha no meu .gitconfig :

[core]
    editor = vi

Para escrever uma mensagem de commit, o editor vi é aberto toda vez e eu tenho que ir no modo de inserção. Então pensei em substituir vi por vii e fiz.

Mas o problema é quando eu faço git commit , ao invés de abrir o vim no modo insert, ele dá esse erro:

error: cannot run vii: No such file or directory
error: There was a problem with the editor 'vii'.
Please supply the message using either -m or -F option.

Isso deixa claro que o git não olha para o arquivo .bash_aliases , mesmo que não esteja relacionado ao bash de alguma forma. Faz diretamente parece se há /usr/bin/vii ou não. E executa se for.

A questão

Posso colocar a versão com alias do vi como vii in /usr/bin/ ?

(e por favor não me sugira usar git commit -m "<commit message>" . Há outra situação onde eu preciso do vim no modo de inserção.)

    
por Santosh Kumar 20.08.2012 / 10:58

2 respostas

7

Aliases são internos para cada um dos seus ambientes shell atuais - eles são expandidos pelo shell atualmente em execução ( bash no seu caso), então eles só afetam o que você executa digitando / colando no seu terminal.

Você tem pelo menos duas opções aqui:

  • crie um script wrapper chamado vii que executará vim -c 'startinsert' e coloque-o preferencialmente em /usr/local/bin/ (ou $HOME/bin , se existir e estiver em seu caminho de pesquisa). O script só precisa conter

    #!/bin/sh1
    exec vim -c 'startinsert' "$@" 2

    (Certifique-se de torná-lo executável executando chmod +x /usr/local/bin/vii .) Dependendo da configuração PATH do seu git / outros programas, você pode precisar especificar o caminho completo para esse script wrapper (por exemplo, editor = /usr/local/bin/vii ).

  • Se estiver tudo bem para você ter o vim sempre começando no modo de inserção, configure-o para isso adicionando startinsert no final de .vimrc .

1 Você pode escrever a linha "she-bang" como #!/bin/bash , mas não há necessidade de um script que não contenha bash isms.
2 $@ deve estar entre aspas duplas, caso o script seja chamado com argumentos que contenham espaço (s). startinsert não precisa ser citado (mas não faz mal).

    
por 20.08.2012 / 11:17
6

Basta definir a variável do editor para

[core]
    editor = vim -c 'startinsert'

Para sua outra resposta, não, você não pode colocar aliases em um diretório, já que um alias é um conceito do seu shell. A maneira normal é criar um script de wrapper apropriado para executar os comandos especificados, por exemplo,

#!/bin/sh
vim -c 'startinsert' "$@"

e salve o script como vii e torne-o executável. Você pode colocar o script onde quiser, mas normalmente esses scripts são salvos em algum lugar na pasta $HOME como $HOME/bin e não nos diretórios globais.

    
por 20.08.2012 / 11:06