2012-11-12 3 views
5

Ich versuche, Vim zu wechseln, um die relative Zeilennummerierung zu wechseln, wenn ich in den visuellen Modus gehe, und danach zurück zur absoluten Nummerierung. Ich habe bemerkt, es gibt InsertEnter und InsertLeave autocmd Ereignisse, die ich so verwenden könnte:Wie kann ich die relative Zeilennummerierung in (und nur in) Vims visuellem Modus aktivieren?

autocmd InsertEnter :set rnu 
autocmd InsertLeave :set nu 

Problem ist, ich kann nicht ein Äquivalent für visuellen Modus zu finden scheinen.

Antwort

5

Es gibt keine solchen Ereignisse für den visuellen Modus (noch implementiert; Sie könnten einen Patch senden). Zur visuellen Modus einzugeben, können Sie einfach die wenigen Befehle außer Kraft setzen, die visuellen Modus eingeben:

:nnoremap <silent> v v:<C-u>set nonu rnu<CR>gv 
:nnoremap <silent> V V:<C-u>set nonu rnu<CR>gv 
:nnoremap <silent> <C-v> <C-v>:<C-u>set nonu rnu<CR>gv 

Die von 'number' wiederherzustellen ist schwieriger, denn abgesehen von explizit über <Esc> Verlassen gibt viele Befehle, die visuellen Modus zu stoppen. Am besten kann ich mit einem Trigger auf CursorMoved:

vnoremap <Esc> <Esc>:set nu<CR> 
:autocmd CursorMoved * if mode() !~# "[vV\<C-v>]" | set nu | endif