vim: + x bit ile dosya oluştur


14

Oluştururken +xkod üzerinde bit kurmanın bir yolu var mı ?

Örneğin ben koşuyorum:

vim -some_option_to_make_file_executable script.sh

ve kaydettikten sonra herhangi bir ek hareket olmadan dosyayı çalıştırabilirim.

ps. Ben çalıştırabilirsiniz chmodgelen vimhatta konsoldan kendisinden, ama bu biraz can sıkıcı, nedenidir vimyeniden dosyaya öneriyor. Ayrıca chmodher seferinde komut yazmak can sıkıcı bir durum . pps. Dosya uzantısına bağlı olarak yapmak harika olurdu (yürütülebilir .txt:-) gerekmez )

Yanıtlar:


23

Bunu nerede bulduğumu hatırlamıyorum, ancak ~ / .vimrc dosyamda aşağıdakileri kullanıyorum

" Set scripts to be executable from the shell
au BufWritePost * if getline(1) =~ "^#!" | if getline(1) =~ "/bin/" | silent !chmod +x <afile> | endif | endif

İlk satır "#!" İle başlıyorsa, komut çalıştırılabilir biti otomatik olarak ayarlar. veya "/ bin /" içerir.


1
Vay canına, bu harika bir şey. Btw, iki katılabilir görünüyor ifbirine 's if getline(1) =~ "^#!/bin/". Her neyse, bu inanılmaz. Teşekkür ederim.
acele

Bu bir "veya" değildir. Sadece ilk koşulu kullanmayı tercih ediyorum,au BufWritePost * if getline(1) =~ "^#!" | silent !chmod +x % | endif
tonoz

1
@rush Çifte if ifadelerinin nedenleri, hemen, sapmayı /bintakip etmediği satırları yakalamaktır #!/usr/bin/env. Elbette bir yolu etrafında bir joker kullanmak: getline(1) =~ "^#!.*/bin/".
Harald Nordgren

1
Temiz hile ama her kaydettiğimde aşağıdakileri alıyorum:written/bin/bash: endif: command not found /bin/bash: endif: command not found
StevieD 21

3
Bu au BufWritePost * if getline(1) =~ "^#!" | if getline(1) =~ "/bin/" | silent execute "!chmod a+x <afile>" | endif | endif
sorunu

4

Bulduğum bu senaryoyu en http://vim.wikia.com . Bence mükemmel bir çözüm değil, kabul edilebilir bir çözüm.

function! SetExecutableBit()
  let fname = expand("%:p")
  checktime
  execute "au FileChangedShell " . fname . " :echo"
  silent !chmod a+x %
  checktime
  execute "au! FileChangedShell " . fname
endfunction
command! Xbit call SetExecutableBit()

Artık yürütme bitini komutla ayarlayabilirsiniz :Xbit. Vim.wikia.com at Max Ischenko'ya tüm kredi


0

Bunu MacVim Özel Sürüm 8.0.648'de (134) kullanıyorum

" if file is executable just exit

au BufWritePost *.sh if FileExecutable("%") | if getline(1) =~ "^#!" | silent !chmod u+x % | endif | endif

" Determines if file is already executable 

function! FileExecutable(fname)

    execute "silent! ! test -x" a:fname
    return v:shell_error

endfunction

0

tonymac'ın cevabı benim için bir noktada durdu (VIM 7.4 ile), @StevieD ile aynı problemi verdi. Bunu değiştirmek sorunu çözdü:

au BufWritePost * if getline(1) =~ "^#!" | if getline(1) =~ "/bin/" | silent execute "!chmod +x <afile>" | endif | endif

Cevabı https://bbs.archlinux.org/viewtopic.php?id=126304 adresinden buldum , ancak @StevieD de aynı cevabı verdi.

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.