我已FCEDIT
设置为vim
。如果我调用fc
命令,它将打开vim
临时文件,并且该文件的内容将是历史记录中最后执行的命令。
问题是,即使我不保存就退出,命令仍然会执行。例如:
$ printf "\nHelloAskubuntu\n\n"
HelloAskubuntu
$ fc # opens vim, I do :q!
printf "\nHelloAskubuntu\n\n"
HelloAskubuntu
我该如何避免这种情况?
答案1
fc
如果编辑器命令未成功退出,则不会执行该命令。在 Vim 中,有一个命令可以强制执行此操作::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.
因此,当您不想运行命令时,请使用:cq
退出 而不是:q!
。如果您不做任何更改,可能可以让 Vim 执行此操作,但与仅使用 相比,这可能更令人讨厌:cq
。
答案2
发生这种情况是因为内容已存储在临时文件中/tmp/bash-fc-*
。直接关闭它,fc
无论如何都会运行该 shell。
我可以在 Ubuntu 16.04 中测试一种有效的方法。
创建代理命令(新编辑器)
sudo vim /usr/local/bin/vim2
让它打开该文件,然后将其清空到磁盘上。因此,如果您不保存,则
vim
内容仅在其中,不会运行任何内容vim
fc
#!/bin/sh sh -c "sleep 1; echo -n ''>$1" & vim $1
修复权限
sudo chmod +x /usr/local/bin/vim2
设置
FCEDIT
为vim2
或暂时测试export FCEDIT=vim2
唯一的希望是你不要比我快,vim
在1秒过去之前关闭。