如何在FreeBSD中编辑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 backupcopyyes来使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