10

現在アクティブなビジュアルモード(ビジュアルまたはビジュアルブロック)をvimscriptでチェックインする最良の方法は何ですか?

について読みましmode()たが、機能させることができません。
echo mode()
if mode() == "v"にはうまくいきません 私にもうまくいきません。

4

3 に答える 3

9

のヘルプを参照してくださいmode()。関連部分:

          v       Visual by character
          V       Visual by line
          CTRL-V  Visual blockwise

ブロック単位のビジュアル モードをチェックするには、ではなくmode() == "\<C-V>"(リテラル^V文字) をチェックする必要があります。mode() == "v"

于 2012-04-09T14:29:40.887 に答える
1

@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
于 2013-11-10T13:09:23.253 に答える