Vimを使用してcrontabファイルを編集するにはどうすればよいですか(「一時ファイルはその場で編集する必要があります」というエラーが表示されます)


12

crontabFreeBSDでファイルを編集するにはどうすればよいですか?

$ 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は、作業罰金に思えます...

回答:


19

問題は、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モードラインです:

# vim: nu et tw=130 ts=8 sts=4 sw=4 ff=unix fo-=l fo+=tcroq2 bkc=yes

ここで重要なのは、bkc=yes@ Martinのvimrc構成に一致するものです。残りは個人的な便利な設定です。

これは、完全性と思考の糧についてであり、@ Martinの最初の答えは、ほとんどの場合に最も適切です。


1

同じエラーではありませんが、かなり頻繁に発生します:

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

-1

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おやつのバックアップファイル。


1
のでcrontab、通常の値を持ち上げEDITORたりVISUAL(それが定義されている場合)、あなたはそれらを設定することができますEDITOR='VIM_NOBACKUP=1 vim'
ムル

@muru試しましたが、うまくいかないと思います。crontab -eを生成しcrontab: VIM_NOBACKUP=1 vim: No such file or directoryます。
ケノーブ

1
Arch LinuxおよびUbuntu、bash、zshで動作するため、OSXのものでなければなりません。
ムル

2
環境変数をいじくり回すことはすべて、私にとって愚かなことです。Vimにはファイル固有の設定を処理する方法があり、autocmdと呼ばれます。リンクからこれをコピーしたように見えますが、その作成者はVimにあまり詳しくないようです。
マーティントゥルノイ

2
なぜそれを含めるのですか?それは物事を行う愚かな方法であり、autocmdを使用しない理由はほとんどありません。これを削除すると、autocmdだけが残ります。これは、1か月半以上ここにあった同じ答えです。この答えは、ノイズだけを追加します。
マーティントゥルノイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.