vim: crea il file con + x bit


14

C'è un modo per impostare +xbit sullo script durante la creazione?

Ad esempio corro:

vim -some_option_to_make_file_executable script.sh

e dopo il salvataggio posso eseguire il file senza ulteriori spostamenti.

ps. Posso eseguire chmoddalla vimconsole o anche dalla console stessa, ma questo è un po 'fastidioso, perché vimsuggerisce di ricaricare il file. Inoltre è fastidioso digitare chmodcomando ogni volta. pps. Sarebbe bello farlo a seconda dell'estensione del file (non ho bisogno di eseguibile .txt:-))

Risposte:


23

Non ricordo dove l'ho trovato, ma uso quanto segue nel mio ~ / .vimrc

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

Il comando imposta automaticamente il bit eseguibile se la prima riga inizia con "#!" o contiene "/ bin /".


1
Wow, è grandioso. A proposito, sembra che tu possa unire due ifin uno if getline(1) =~ "^#!/bin/". Comunque è fantastico. Grazie.
corsa il

Questo non è un "o". Preferisco usare solo la prima condizione,au BufWritePost * if getline(1) =~ "^#!" | silent !chmod +x % | endif
caveau

1
@rush I motivi del doppio se le istruzioni sono di prendere delle linee in cui il /binnon segue immediatamente lo shebang, come #!/usr/bin/env. Un giro modo che è, naturalmente, per usare un jolly: getline(1) =~ "^#!.*/bin/".
Harald Nordgren,

1
Trucco pulito ma ricevo quanto segue ogni volta che salvo:written/bin/bash: endif: command not found /bin/bash: endif: command not found
StevieD

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

4

Ho trovato questo script su http://vim.wikia.com . Non una soluzione perfetta, ma accettabile, credo.

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()

Ora puoi impostare il bit di esecuzione con il comando :Xbit. Tutto il credito a Max Ischenko su vim.wikia.com


0

Lo uso in MacVim Custom versione 8.0.648 (134)

" 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

la risposta di tonymac ha smesso di funzionare per me ad un certo punto (con VIM 7.4), dandomi lo stesso problema di @StevieD. La modifica ha risolto il problema:

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

Ho trovato la risposta da https://bbs.archlinux.org/viewtopic.php?id=126304 , sebbene anche @StevieD abbia dato la stessa risposta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.