2010-03-06 18 views
9

Il seguente codice è dentro la mia .vimrc e ripristina in genere l'ultima posizione del cursore di un file ho aperto con vim:vim ripristina la posizione del cursore; escludere i file speciali

autocmd BufReadPost * 
    \ if line("'\"") > 1 && line("'\"") <= line("$") | 
    \ exe "normal! g`\"" | 
    \ endif 

mi piace molto questa caratteristica e vuole lasciarlo acceso, eccezione un file: Quando si esegue il commit con git, vim viene attivato e posso modificare il messaggio di commit con esso. Tuttavia il file di messaggi di commit esiste prima dell'avvio di vim (ed è precompilato), quindi vim lo vede come un file esistente e ripristina l'ultima posizione del cursore (che di solito non è il punto in cui vorrei iniziare a digitare).

Quindi esiste la possibilità di modificare lo script precedente per escludere il file ?

+2

: -) Mi ci è voluto meno tempo per digitare 'ggI' dopo che git commette, in realtà. –

+1

'ggI'? Cos'è quello? – poke

+1

è un comando vim per andare all'inizio di un file e passare alla modalità di inserimento :-) –

risposta

8

Dopo aver letto il manuale sui comandi automatici, ho notato che non sembra possibile definire il modello a cui corrispondono in modo tale da escludere uno schema speciale. Inoltre, non ero in grado di utilizzare alcune variabili che contengono il nome file corrente, in modo da espandere semplicemente l'esistente se escludere il file.

Tuttavia, sulla base del commento di Pavel Shved (circa il gg muoversi verso la parte superiore del file) ho pensato che nello stesso modo in cui dovrebbe essere possibile semplicemente sovrascrivere l'effetto della posizione di ripristino, semplicemente spostandolo verso l'alto successivamente di nuovo. Così sono arrivato fino a questo:

autocmd BufReadPost COMMIT_EDITMSG 
    \ exe "normal! gg" 

Posizionamento questo dopo le precedenti autocmd BufReadPost semplicemente catene l'esecuzione evento, in modo vim, dopo aver eseguito il primo e il ripristino della posizione, legge questo e lo confronta sul nome del file esclusi e usa lo gg per spostare il cursore in alto, sovrascrivendo sostanzialmente l'effetto dell'autocd originale.

e che funziona bene :)

1

Probabilmente dovresti investigare su mksession. Puoi impostare i comandi automatici di VimEnter/VimLeave per "fare la cosa giusta" quando hai specificato i file sulla riga di comando (come quando git invoca vim). Ci sono numerosi script per questo fluttuante, vedi http://vim.wikia.com/wiki/Working_with_multiple_sessions per esempio.

3

Capisco che avete già trovare una soluzione, ma ho avuto la stessa domanda e si avvicinò con un'alternativa che non richiede il concatenamento.

function! PositionCursorFromViminfo() 
    if !(bufname("%") =~ '\(COMMIT_EDITMSG\)') && line("'\"") > 1 && line("'\"") <= line("$") 
    exe "normal! g`\"" 
    endif 
endfunction 
:au BufReadPost * call PositionCursorFromViminfo() 
+0

Bella raffinatezza: sembra più pulito di un doppio salto! –

0

Prova questa, la sua spostare il cursore in ultima posizione

set nascosto

1

Mettere le seguenti linee al posto delle linee nel .vimrc:

au BufWinLeave * mkview 
au BufWinEnter * silent loadview 
Problemi correlati