2012-01-28 15 views
27

Sto usando CtrlW per navigare tra finestre divise VIM. Esistono modi diversi per farlo?Navigazione tra le finestre VIM in modo alternativo

Per esempio, se ho, diciamo, 5 finestre dividere aperto e vuole passare alla parte superiore della finestra a sinistra, CtrlW è molto scomodo in quanto richiede molte sequenze di tasti.

risposta

38

Perché non impostare qualcosa di simile?

nnoremap <C-h> <C-w>h 
nnoremap <C-j> <C-w>j 
nnoremap <C-k> <C-w>k 
nnoremap <C-l> <C-w>l 

Molto più veloce ...

+1

Grazie. Sono a conoscenza di questa soluzione, ma stavo cercando qualcosa che permettesse di navigare verso una finestra specifica. Ad ogni modo, questa dovrebbe essere una soluzione soddisfacente nel caso in cui non esistano alternative. – Adas

+0

@Adas - Non esiste un modo migliore, non che io sappia. Il fatto è che non navighi attraverso Windows (sono solo ... punti di vista). Si naviga attraverso i buffer. Quindi, se hai una configurazione 2x2, la parte in alto a sinistra non sarà necessariamente la 1a, in alto a destra la seconda e così via ... – Rook

+2

Ho 'nnoremap w', poiché non uso mai la chiave di ritorno in modalità normale. Quindi è facile scorrere le spaccature. –

3

È possibile utilizzare il comando nnoremap nel vostro vimrc di utilizzare combinazioni di tasti personalizzate.

La sintassi di nnoremap è questo:

nnoremap new_keybinding keystrokes 

Il comando nnoremap assegna un nuovo combinazione di tasti che, quando lo si preme in modalità normale, la sequenza di tasti che sono stati assegnati a questo comando vengono ripetuti Vim .

EDIT: C'è anche il comando nmap. La differenza tra i due è che nmap consente di sovrascrivere le combinazioni di tasti correnti, mentre lo nnoremap no. La differenza tra di loro è spiegata in this answer.

Per esempio, ho messo queste righe nel mio .vimrc:

"Better window navigation 
nnoremap <C-j> <C-w>j 
nnoremap <C-k> <C-w>k 
nnoremap <C-h> <C-w>h 
nnoremap <C-l> <C-w>l 

Questo mi permette di utilizzare Ctrl + j, Ctrl + k, Ctrl + h, Ctrl + L invece di Ctrl + Wj, Ctrl + Wk , Ctrl + Wh, Ctrl + Wl per la navigazione finestra, pur mantenendo le vecchie combinazioni di tasti.

È inoltre possibile cercare :help key-mappings per ulteriori informazioni.

+1

Per quanto riguarda nmap/nnoremap - no, non è questa la differenza. È possibile sovrascrivere i mapping della nnor mappa come qualsiasi altro, la differenza è che nnoremap non è ricorsiva. – Rook

18

È possibile utilizzare <number><c-w>w per passare a una finestra particolare. Quindi 1<c-w>w passa alla prima finestra (angolo in alto a sinistra) 11<c-w>w sposta all'ultima finestra (qui presumo che tu abbia meno di 11 divisioni).

Trovo anche i seguenti mapping convenienti e li ho nel mio.vimrc

nnoremap <tab> <c-w> 
nnoremap <tab><tab> <c-w><c-w> 

che io uso per la finestra cuciture (per qualche motivo se non definisco la seconda mappatura se scheda ho colpito due volte ricevo un messaggio "no identificativo sotto il cursore)

Reading la pagina di aiuto per CTRL-W, c'è anche un modo più conveniente di 1<c-w>w e 11<c-w>w di andare alla prima e ultima finestra:. <c-w>t va alla finestra superiore e <c-w>b va alla finestra in basso

0

È possibile creare movimenti diagonali continuando <C-w> una seconda volta in un'altra direzione.

"move from bottom left to top right diagonally 
    "Mnemonic: keyboard finger movement from j to i 
    nnoremap <C-i> <C-w>l<C-w>k 

    "move from top right to bottom left diagonally 
    "Mnemonic: keyboard finger movement from j to n 
    nnoremap <C-n> <C-w>h<C-w>j 

    "move from top left to bottom right diagonally 
    "Mnemonic: keyboard finger movement from j to m 
    nnoremap <C-m> <C-w>l<C-w>j 

    "move from bottom right to top left diagonally 
    "Mnemonic: keyboard finger movement from j to y 
    nnoremap <C-y> <C-w>h<C-w>k 
+0

(^ M) ha un significato speciale e potrebbe rompere in alcune situazioni –

1

Grazie alla this answer sul sito dedicato a SE Vim, mi si avvicinò a un'altra alternativa che utilizza un plug-in per creare un sotto-modalità dedicata alla gestione di Windows. Significa che con una combinazione di tasti inserisco una nuova modalità in cui alcune chiavi mi permetteranno di fare diverse azioni sulle finestre.

Dopo l'installazione vim-submode aggiungiamo alcune linee al nostro vimrc per configurare una nuova modalità:

" Create a submode to handle windows 
" The submode is entered whith <Leader>k and exited with <Leader> 
call submode#enter_with('WindowsMode', 'n', '', '<Leader>k', ':echo "windows mode"<CR>') 
call submode#leave_with('WindowsMode', 'n', '', '<Leader>') 

Ora è sufficiente premere leader + k per accedere alla nuova modalità (È possibile modificare questo con la riga submode#enter_with) e premere Leader per uscire.

" Change of windows with hjkl 
call submode#map('WindowsMode', 'n', '', 'j', '<C-w>j') 
call submode#map('WindowsMode', 'n', '', 'k', '<C-w>k') 
call submode#map('WindowsMode', 'n', '', 'h', '<C-w>h') 
call submode#map('WindowsMode', 'n', '', 'l', '<C-w>l') 

Con queste righe, dopo aver inserito la nuova modalità (con leader + k) sarete in grado di spostarsi tra le finestre con i tasti hjkl come se si stesse utilizzando <c-w>hjlk in modalità normale.

" Resize windows with <C-yuio> (interesting on azerty keyboards) 
call submode#map('WindowsMode', 'n', '', 'u', '<C-w>-') 
call submode#map('WindowsMode', 'n', '', 'i', '<C-w>+') 
call submode#map('WindowsMode', 'n', '', 'y', '<C-w><') 
call submode#map('WindowsMode', 'n', '', 'o', '<C-w>>') 

Alcuni paio di righe per consentire il ridimensionamento della finestra con yuio(scelgo queste chiavi perché su una tastiera AZERTY sono solo sulla riga sopra hjkl e sono abbastanza comodo da usare, forse sarebbe più utile per cambiarlo su una tastiera qwerty, Im non sicuro).

" Move windows with <C-hjkl> 
call submode#map('WindowsMode', 'n', '', '<C-j>', '<C-w>J') 
call submode#map('WindowsMode', 'n', '', '<C-k>', '<C-w>K') 
call submode#map('WindowsMode', 'n', '', '<C-h>', '<C-w>H') 
call submode#map('WindowsMode', 'n', '', '<C-l>', '<C-w>L') 

Spostiamo le finestre con <C-hjkl>.

" close a window with q 
call submode#map('WindowsMode', 'n', '', 'q', '<C-w>c') 

" split windows with/and ! 
call submode#map('WindowsMode', 'n', '', '/', '<C-w>s') 
call submode#map('WindowsMode', 'n', '', '!', '<C-w>v') 

E alcuni altri mapping per chiudere una finestra e creare nuove suddivisioni.

let g:submode_keep_leaving_key = 1 
let g:submode_timeout = 0 

Infine Queste opzioni consentono di tenere premuto un tasto e si ripeterà la sua azione.

Nota Sono consapevole che questa risposta descrive molto più della semplice navigazione tra le finestre come l'OP stava chiedendo.Penso che la creazione di una sottomodalità sia abbastanza comoda, ma interessa solo se la sottomodalità consente di fare più di una sola azione.

Problemi correlati