Crontab dosyalarını Vim ile nasıl düzenlerim (Hatayı alıyorum: 'geçici dosya yerinde düzenlenmelidir')


12

crontabFreeBSD'deki dosyaları nasıl düzenlerim ?

$ crontab -e
# ... I do my thing in vim & :wq

"crontab.9ZcXiFaawt" 6L, 203C written
crontab: temp file must be edited in place
Exit 1

İyi EDITOR=nviçalışıyor ... Linux da iyi çalışıyor ...

Yanıtlar:


19

Sorun Vim'in dosyaları nasıl yazdığıdır. Varsayılan olarak, dosyanın bir kopyasını oluşturur ve orijinal dosyanın üzerine yazar.

Bunu aşağıdakilerle gözlemleyebilirsiniz:

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

# Open file in Vim, :wq

# inode changed!
$ ls -i a
3155322 a

crontabbununla karışır (bkz. :help crontab)

Sen kullanmanız gerekir :set backupcopyiçin yesorijinal dosya üzerine yazma Vim yapmak:

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

Bunu crontab dosyaları için otomatik olarak aşağıdakilerle yapabilirsiniz:

au FileType crontab setlocal bkc=yes

2

@ Martin'in cevapları doğrudur. Yine de, benim gibi, vimrcdosyalarını ara sıra istisnalarla doldurmaya çalışan insanlar için bir varyasyon - burada bir crontab düzenlemek, model kullanmaktır. Bu, istisnaların doğrudan hedef dosyaya yerleştirilmesine izin verir.

Aşağıda crontab modelin var:

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

Burada önemli bkc=yesolan, @ Martin'in vimrcyapılandırmasıyla eşleşen . Geri kalanı kişisel rahatlık ayarlarıdır.

Bu, bütünlük ve düşünce için yiyecek için, @ Martin'in ilk cevabı vakaların çoğunda en yeterli olanıdır.


1

Aynı hata değil, aynı zamanda oldukça sık:

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

Eğer crontab viyerine kullanıyorsanız bu hata görünecektir vim. ~/.bashrcDosyanıza aşağıdaki kodu ekleyerek crontab düzenleyicisini ayarlamanız gerekir :

export EDITOR=vim

-1

Aynı şey OSX için de geçerlidir. Sorunu araştırdıktan sonra, düz ile çalıştığını gördüm vi, ancak işe yaramadı vim.

Yani düzeltme olabilir:

EDITOR=vi crontab -e

Ancak vigenellikle vim(örn. OSX'te) ile bağlantılıdır, bu yüzden aynı şeydir.


Bu, vimrc dosyanızdaki aşağıdaki satırla çözülebilir :

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

Bunun için aşağıdaki satırları .vimrc dosyasına ekleyerek başka bir geçici çözüm vardır :

if $VIM_NOBACKUP
  set nobackup
  set nowritebackup
endif

ve şu komutu çalıştırın:

VIM_NOBACKUP=1 crontab -e

Aşağıdaki değişkeni de tanımlamayı deneyebilirsiniz:

EDITOR='VIM_NOBACKUP=1 vim'

Kaynak: crontab: temp dosyası yerinde düzenlenmelidir


Bunun olmasının nedeni , yedekleme dosyalarının yolu vim/ vidavranışı ile ilgilidir.


1
Yana crontabtipik değerini kaldırır EDITORveya VISUAL(o tanımlanmış ise), bunları ayarlayabilirsiniz: EDITOR='VIM_NOBACKUP=1 vim'.
muru

@muru Denedim, ama işe yaradığını sanmıyorum. crontab -eüretir crontab: VIM_NOBACKUP=1 vim: No such file or directory.
kenorb

1
OSX bir şey olmalı, çünkü Arch Linux ve Ubuntu, bash ve zsh üzerinde çalışıyor.
muru

2
Çevre değişkenleri ile ilgili tüm karışıklıklar bana aptalca geliyor; Vim, dosyaya özgü ayarlarla başa çıkmanın bir yoluna sahiptir ve buna autocmds denir. Görünüşe göre bunu bağlantıdan kopyaladınız, ancak bunun yazarı Vim'e çok aşina değil gibi görünüyor.
Martin Tournoij

2
Neden hiç dahil ettiniz? Bir şeyler yapmanın aptalca bir yolu ve autocmd kullanmamanın neredeyse hiçbir nedeni yok. Bunu kaldırdığımızda, sadece bir buçuk aydır burada olan aynı cevap olan autocmd ile kalıyoruz. Bu cevap gürültüden başka bir şey katmıyor.
Martin Tournoij
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.