Como evitar a execução de comandos editados com fc

3

Eu tenho FCEDIT definido como vim . Se eu chamar o comando fc , ele abrirá vim com o arquivo temporário e o conteúdo desse arquivo será o último comando executado do histórico.

O problema é que, mesmo se eu sair sem salvar, o comando ainda será executado. Por exemplo:

$ printf "\nHelloAskubuntu\n\n"

HelloAskubuntu

$ fc # opens vim, I do :q!
printf "\nHelloAskubuntu\n\n"

HelloAskubuntu

Como evito isso?

    
por Sergiy Kolodyazhnyy 19.07.2016 / 02:55

2 respostas

1

fc não executará o comando se o comando do editor não tiver saído com sucesso. No Vim, há um comando para forçar isso : :cq :

                                                        :cq :cquit
:cq[uit][!]             Quit Vim with an error code, so that the compiler
                        will not compile the same file again.
                        WARNING: All changes in files are lost!  Also when the
                        [!] is not used.  It works like ":qall!" :qall,
                        except that Vim returns a non-zero exit code.

Então, quando você não quiser executar o comando, use :cq para sair em vez de :q! . Pode ser possível fazer o Vim fazer isso se você não fez nenhuma mudança, mas isso provavelmente será mais irritante para trabalhar de maneira confiável do que apenas usar :cq .

    
por muru 07.04.2017 / 11:39
0

Isso acontece porque o conteúdo já está armazenado no arquivo temporário /tmp/bash-fc-* . Fechando-o diretamente, fc executará esse shell de qualquer maneira.

Uma abordagem de trabalho que eu poderia testá-lo no Ubuntu 16.04.

  1. Crie um comando de proxy (novo editor)

    sudo vim /usr/local/bin/vim2
    

    Abra o arquivo em vim e esvazie-o no disco. Portanto, o conteúdo está apenas em vim , se você não salvá-lo, fc não executará nada

    #!/bin/sh
    
    sh -c "sleep 1; echo -n ''>$1" &
    vim $1
    

    Corrigir permissão

    sudo chmod +x /usr/local/bin/vim2
    
  2. Defina FCEDIT para vim2 ou temporariamente para testar export FCEDIT=vim2

A única esperança é que você não seja mais rápido do que eu, para fechar vim antes de passar um segundo.

    
por user.dz 03.10.2016 / 11:48