@Remonn уже сказал это в комментариях, но это было не очень понятно для меня. Это, как мне удалось увидеть результаты:
function! F()
normal! gv
throw mode()
endfunction
vnoremap <F9> <ESC>:call F()<CR>
Go в различные визуальные режимы, а затем ударил F9
увидеть.
Мне нужен бросок, потому что линия -- VISUAL --
охватывает любое эхо-сообщение. Может ли кто-нибудь эхо в режиме VISUAL?
В общем, я считаю, что лучше всего делать, когда вам нужно будет mode()
, чтобы сделать два разных отображения, а затем либо две различные функции, которые делают совершенно разные вещи:
function! Fnorm()
endfunction
function! Fvis()
endfunction
nnoremap <F9> :call Fnorm()<CR>
nnoremap <F9> <ESC>:call Fvis()<CR>gv
или одной функции и дают различные параметры к нему в зависимости от отображения:
function! F(param)
endfunction
nnoremap <F9> :call F(1)<CR>
nnoremap <F9> <ESC>:call F(2)<CR>gv
Другой связанной хитрость заключается в том, что делать, если вы хотите сделать что-то в то время как вы находитесь в визуальном режиме, как переместить курсор. Лучшее, что я могу сделать, это:
function! Fvis()
normal! gv
cursor(1, 1)
endfunction
nnoremap <F9> <ESC>:call Fvis()<CR>gv
Что вы хотите сделать, если активен режим Visual Block? –
'@Pavan, если режим Visual Block активен, я хочу рассчитать начальный конец конца блока (строка + столбцы). Если визуальный режим активен, я хочу рассчитать только начальную и конечную строки визуального выделения, но не столбцы. – Reman
Проверьте ': help visualmode()'. – Raimondi