crontab
文件?$ crontab -e
# ... I do my thing in vim & :wq
"crontab.9ZcXiFaawt" 6L, 203C written
crontab: temp file must be edited in place
Exit 1
使用
EDITOR=nvi
可以正常工作... Linux似乎也可以正常工作... #1 楼
问题是Vim如何写文件。默认情况下,它会复制文件并覆盖原始文件。您可以使用以下方法观察此文件:
# Show the file's inode
$ ls -i a
3156153 a
# Open file in Vim, :wq
# inode changed!
$ ls -i a
3155322 a
crontab
感到困惑通过此操作(请参阅:help crontab
)您需要使用
:set backupcopy
到yes
来使Vim覆盖原始文件:"yes" make a copy of the file and overwrite the original one
您可以执行此操作自动对crontab文件执行以下操作:
au FileType crontab setlocal bkc=yes
#2 楼
@Martin的自我回答是正确的。但是,对于像我这样试图限制偶尔出现的例外情况填充其vimrc
文件的人(这里在编辑crontab中)的一种变化是使用模式线。这允许将异常直接放置在目标文件中。下面是我的crontab modeline:
# vim: nu et tw=130 ts=8 sts=4 sw=4 ff=unix fo-=l fo+=tcroq2 bkc=yes
这里重要的一点是
bkc=yes
匹配@Martin的vimrc
配置。其余的是个人便利设置。出于完整性和考虑的考虑,@ Martin的最初答案在大多数情况下是最适当的。
#3 楼
不是相同的错误,但也经常发生:Error detected while processing /root/.vimrc:
line 2:
E319: Sorry, the command is not available in this version: syntax enable
line 7:
...
如果您对crontab使用
vi
而不是vim
,则会出现此错误。您需要通过在您的
~/.bashrc
文件中添加以下代码来设置crontab的编辑器:export EDITOR=vim
#4 楼
在OSX上也是如此。在研究了问题之后,我发现它可以与普通vi
一起使用,但不适用于vim
。所以解决方法可能是:
EDITOR=vi crontab -e
但是
vi
通常链接到vim
(例如在OSX上),因此是同一回事。可以通过vimrc文件中的以下行解决:
au BufNewFile,BufRead crontab.* set nobackup | set nowritebackup
对此有另一种解决方法,即将以下行添加到.vimrc文件中:
if $VIM_NOBACKUP
set nobackup
set nowritebackup
endif
并运行以下命令:
VIM_NOBACKUP=1 crontab -e
您也可以尝试定义以下变量:
EDITOR='VIM_NOBACKUP=1 vim'
来源:crontab:临时文件必须在适当位置进行编辑
发生这种情况的原因与
vim
/ vi
处理备份文件的方式有关。
评论
由于crontab通常会提升EDITOR或VISUAL的值(如果已定义),因此可以对其进行设置:EDITOR ='VIM_NOBACKUP = 1 vim'。
–muru
15年3月26日在7:56
@muru我已经尝试过,但是我认为它不起作用。 crontab -e生成crontab:VIM_NOBACKUP = 1 vim:无此类文件或目录。
– Kenorb
15年3月26日在14:07
必须是OSX,因为它可以在Arch Linux和Ubuntu,bash和zsh上运行。
–muru
2015年3月26日14:10
对环境变量的种种困扰对我来说似乎很愚蠢。 Vim有一种处理文件特定设置的方法,称为autocmds。看起来您只是从链接中复制了此内容,但似乎该作者对Vim不太熟悉。
–马丁·图尔诺伊(Martin Tournoij)
2015年3月26日14:58
为什么要全部包含?这是一种愚蠢的处理方式,几乎从来没有理由不使用autocmd。当我们删除它时,只剩下autocmd,这是已经存在一个半月以上的答案。这个答案只会增加噪音。
–马丁·图尔诺伊(Martin Tournoij)
2015年3月26日15:32