Làm cách nào để chỉnh sửa tệp crontab bằng Vim (Tôi gặp lỗi: 'tệp tạm thời phải được chỉnh sửa tại chỗ')


12

Làm cách nào để chỉnh sửa crontabtệp trong 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

Sử dụng EDITOR=nvihoạt động tốt ... Linux dường như cũng hoạt động tốt ...

Câu trả lời:


19

Vấn đề là làm thế nào Vim ghi tập tin. Theo mặc định, nó tạo một bản sao của tệp và ghi đè lên bản gốc.

Bạn có thể quan sát điều này với:

# Show the file's inode
$ ls -i a
3156153 a

# Open file in Vim, :wq

# inode changed!
$ ls -i a
3155322 a

crontabbị nhầm lẫn bởi điều này (xem :help crontab)

Bạn cần sử dụng :set backupcopyđể yeslàm cho Vim ghi đè lên tệp gốc:

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

Bạn có thể làm điều này tự động cho các tệp crontab với:

au FileType crontab setlocal bkc=yes

2

@ Tự trả lời của Martin là chính xác. Mặc dù vậy, một biến thể, đối với những người như tôi, những người cố gắng hạn chế việc điền vào vimrctệp của họ với các ngoại lệ không thường xuyên - ở đây chỉnh sửa một crontab, là sử dụng các mô hình. Điều này cho phép đặt các ngoại lệ trực tiếp trong tệp mục tiêu.

Dưới đây là mô hình crontab của tôi:

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

Điểm quan trọng ở đây là bkc=yesphù hợp với vimrccấu hình của @ Martin . Phần còn lại là cài đặt tiện lợi cá nhân.

Điều này nói lên sự hoàn chỉnh và thực phẩm cho suy nghĩ, câu trả lời ban đầu của @ Martin là đầy đủ nhất trong phần lớn các trường hợp.


1

Không phải lỗi tương tự nhưng cũng xảy ra khá thường xuyên:

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

Lỗi này sẽ hiển thị, nếu bạn sử dụng vithay vì vimcho crontab. Bạn cần đặt trình chỉnh sửa crontab bằng cách thêm đoạn mã sau vào ~/.bashrctệp của mình :

export EDITOR=vim

-1

Điều tương tự cũng xảy ra trên OSX. Sau khi điều tra vấn đề, tôi thấy nó hoạt động tốt vi, nhưng nó không hoạt động vim.

Vì vậy, sửa chữa có thể là:

EDITOR=vi crontab -e

Tuy nhiên vithường được liên kết đến vim(ví dụ trên OSX) vì vậy đó là điều tương tự.


Điều này có thể được giải quyết bằng dòng sau trong tệp vimrc của bạn :

au BufNewFile,BufRead crontab.* set nobackup | set nowritebackup

Có một cách giải quyết khác cho việc này bằng cách thêm các dòng sau vào tệp .vimrc :

if $VIM_NOBACKUP
  set nobackup
  set nowritebackup
endif

và chạy lệnh:

VIM_NOBACKUP=1 crontab -e

Bạn cũng có thể thử xác định biến sau:

EDITOR='VIM_NOBACKUP=1 vim'

Nguồn: crontab: tập tin tạm thời phải được chỉnh sửa tại chỗ


Lý do những gì điều này đang xảy ra phải làm với cách vim/ vixử lý các tập tin sao lưu.


1
crontabthường nâng giá trị của EDITORhoặc VISUAL(nếu được xác định), bạn có thể đặt chúng : EDITOR='VIM_NOBACKUP=1 vim'.
muru

@muru Tôi đã thử, nhưng tôi không nghĩ nó hoạt động. crontab -etạo ra crontab: VIM_NOBACKUP=1 vim: No such file or directory.
kenorb

1
Phải là một thứ OSX, vì nó hoạt động trên Arch Linux và Ubuntu, bash và zsh.
muru

2
Tất cả các mucking về với các biến môi trường có vẻ ngớ ngẩn đối với tôi; Vim có một cách để xử lý các cài đặt dành riêng cho tệp và được gọi là autocmds. Có vẻ như bạn vừa sao chép điều này từ liên kết, nhưng có vẻ như tác giả của điều đó không quen thuộc lắm với Vim.
Martin Tournoij

2
Tại sao bao gồm nó cả? Đó là một cách làm việc ngớ ngẩn, và gần như không bao giờ có lý do để không sử dụng autocmd. Khi chúng tôi loại bỏ điều đó, chúng tôi chỉ còn lại autocmd, đó là câu trả lời tương tự đã tồn tại hơn một tháng rưỡi. Câu trả lời này không thêm gì ngoài tiếng ồn.
Martin Tournoij
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.