現在アクティブなビジュアルモード(ビジュアルまたはビジュアルブロック)をvimscriptでチェックインする最良の方法は何ですか?
について読みましmode()
たが、機能させることができません。
echo mode()
私
if mode() == "v"
にはうまくいきません 私にもうまくいきません。
のヘルプを参照してくださいmode()
。関連部分:
v Visual by character V Visual by line CTRL-V Visual blockwise
ブロック単位のビジュアル モードをチェックするには、ではなくmode() == "\<C-V>"
(リテラル^V
文字) をチェックする必要があります。mode() == "v"
@Remonnはすでにコメントでそれを言っていますが、私にはあまり明確ではありませんでした。これは私が結果を見ることができた方法です:
function! F()
normal! gv
throw mode()
endfunction
vnoremap <F9> <ESC>:call F()<CR>
さまざまなビジュアル モードに移動し、ヒットF9
して確認します。
-- VISUAL --
行がエコーメッセージをカバーしているため、スローが必要です。VISUAL モードで誰でもエコーできますか?
一般に、必要な場合に行う最善の方法mode()
は、2 つの異なるマッピングを作成してから、まったく異なることを行う 2 つの異なる関数を作成することだと思います。
function! Fnorm()
endfunction
function! Fvis()
endfunction
nnoremap <F9> :call Fnorm()<CR>
nnoremap <F9> <ESC>:call Fvis()<CR>gv
または 1 つの関数を作成し、マッピングに応じて異なるパラメーターを指定します。
function! F(param)
endfunction
nnoremap <F9> :call F(1)<CR>
nnoremap <F9> <ESC>:call F(2)<CR>gv
もう 1 つの関連するトリックは、カーソルを移動するなど、ビジュアル モードで何かをしたい場合の対処法です。私ができる最善のことは次のとおりです。
function! Fvis()
normal! gv
cursor(1, 1)
endfunction
nnoremap <F9> <ESC>:call Fvis()<CR>gv