Как мне отредактировать файлы crontab с помощью Vim (я получаю сообщение об ошибке: «временный файл должен быть отредактирован на месте»)


12

Как мне редактировать crontabфайлы во FreeBSD?

$ 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 backupcopyчтобы yesVim перезаписал исходный файл:

"yes"   make a copy of the file and overwrite the original one

Вы можете сделать это автоматически для файлов crontab с помощью:

au FileType crontab setlocal bkc=yes

2

Ответ @ Мартина правильный. Однако, для таких людей, как я, которые пытаются ограничить заполнение своего vimrcфайла случайными исключениями, в данном случае редактирование crontab заключается в использовании моделин. Это позволяет помещать исключения непосредственно в целевой файл.

Ниже моя модел crontab:

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

Важным моментом здесь является то, bkc=yesчто соответствует vimrcконфигурации @ Martin . Остальные - настройки личного удобства.

Это говорит о полноте и пище для размышлений, первоначальный ответ @ Martin является наиболее адекватным в большинстве случаев.


1

Не та же ошибка, но также происходит довольно часто:

Error detected while processing /root/.vimrc:
line    2:
E319: Sorry, the command is not available in this version: syntax enable
line    7:
...

Эта ошибка появится, если вы используете viвместо vimcrontab. Вам нужно установить редактор crontab, добавив следующий код в ваш ~/.bashrcфайл:

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
Должно быть, это вещь OSX, потому что она работает на Arch Linux и Ubuntu, bash и zsh.
Муру

2
Мне все глупо с переменными окружения; В Vim есть способ работать с настройками файлов, и он называется autocmds. Похоже, вы только что скопировали это из ссылки, но кажется, что автор этого не очень знаком с Vim.
Мартин Турной

2
Зачем включать это вообще? Это глупый способ делать вещи, и почти никогда не бывает причин не использовать autocmd. Когда мы удалим это, у нас останется только autocmd, который является тем же ответом, который был здесь более полутора месяцев. Этот ответ не добавляет ничего, кроме шума.
Мартин Турной
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.