2009-07-08 14 views
8

C'è un modo per disabilitare gli avvisi in VIM?Disattiva avviso in VIM?

In particolare, desidero disattivare l'avviso 12 quando un file passa dalla lettura sola alla scrittura. Ho uno script che apre il file per la modifica in perforce, ma vim pensa che il file sia cambiato ed emette un avviso.

Grazie

+0

Potrebbe essere che a volte il file è in realtà cambiato? Per esempio. se non avessi la revisione della testa aperta in VIM, un'apertura per la modifica proverebbe effettivamente a sostituire il tuo file con quello più recente. –

+0

Il comando che sto usando, 'p4 edit', non si sincronizzerà con una revisione diversa di quel file, senza dirlo esplicitamente. Il file verrà modificato solo se sinceramente sincronizzato dietro a vim's back. –

risposta

6

aggiungere la seguente riga al file Vimrc:

set autoread

Questo disabiliterà avvertimenti "di sola lettura essere accessibile"

+1

Attenzione, questo ha un effetto aggiuntivo: rileggere il file. Nell'esempio OP questo non ha importanza, ma in alcuni casi si potrebbe desiderare di sopprimere solo l'avviso senza rileggere il buffer. Autocmd per FileChangedRO e FileChangedShell può raggiungere questo obiettivo. – Charles

10

Ho la seguente nel mio Vimrc; dovresti solo aver bisogno del secondo. Fa eco al messaggio nella barra di stato invece di far apparire una finestra di dialogo.

autocmd FileChangedRO * echohl WarningMsg | echo "File changed RO." | echohl None 
autocmd FileChangedShell * echohl WarningMsg | echo "File changed shell." | echohl None 

Prova :help FileChangedShell per ulteriori informazioni.

2

Sto usando da un po 'il FileChangedRO per verificare automaticamente i file quando si inizia a modificarli e ho trovato fastidioso anche l'avviso W12. Il problema è che p4 edit aggiorna gli attributi del file per rimuovere il flag di sola lettura. Se come parte della modifica iniziale cambi anche il file, Vim lo vede come un conflitto poiché non è più solo in lettura. Ecco la soluzione che uso, che è un po 'più prudente sull'uso di FileChangedShell nel caso in cui il file sia stato modificato esternamente per qualche altro motivo.

let s:IgnoreChange=0 
autocmd! FileChangedRO * nested 
    \ let s:IgnoreChange=1 | 
    \ call system("p4 edit " . expand("%")) | 
    \ set noreadonly 
autocmd! FileChangedShell * 
    \ if 1 == s:IgnoreChange | 
    \ let v:fcs_choice="" | 
    \ let s:IgnoreChange=0 | 
    \ else | 
    \ let v:fcs_choice="ask" | 
    \ endif 
+0

Questa è una bellissima soluzione, esattamente quello che stavo cercando, grazie! – mrkj