スパム対策として書込み時にID/PWを要求されますが、ローマ字で ほげ/ホゲ で書き込めるようになります。

文字単位でヴィジュアルモード選択範囲を取得する

  • ページ: ScriptSample
  • カテゴリー: その他
  • 投稿日: 2006-07-10 01:51:13 (月)

メッセージ

選択範囲を受け取る関数を作るには、range をつけて a:firstline と a:lastline を使えばよい。

function! Xyzzy() range
  echo a:firstline . "行目から" . a:lastline . "行目までを選択しましたね?"
endfunction

しかしこれでは行単位でしか選択範囲を取得できない。

選択したテキストを文字単位で取得するには、レジスタにヤンクするなどといった工夫が必要になる。

function! Dict(word)
  echo "「". a:word . "」の意味はわかりません"
endfunction

vnoremap \d <Esc>:call Dict(GetVisualRegionString())<CR>
※ GetVisualRegionString() は下で定義している関数。

文字列を取得、セットする関数

次のような GetVisualRegionString?, SetVisualRegionString? 関数を作っておくと、範囲選択した文字列を取得して、変更を加えてセットする、ようなことが可能となる。

 function! GetVisualRegionString()
   " レジスタ退避
   let old_reg=getreg('a')
   let old_regmode=getregtype('a')

   silent normal! gv"ay
   let selected=@a

   " レジスタ復元
   call setreg('a', old_reg, old_regmode)
   return selected
 endfunction
 function! SetVisualRegionString(str)
   let @z = a:str
   let paste_save = &paste
   set paste
   silent execute "normal! gv\"_d"
   if col('.') == strlen(getline('.'))
     silent execute "normal! a\<C-R>z\<ESC>"
   else
     silent execute "normal! i\<C-R>z\<ESC>"
   end
   let &paste = paste_save
 endfunction
 function! Sandwich(sep) range
     call SetVisualRegionString(a:sep . GetVisualRegionString() . a:sep)
 endfunction




トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-10-14 (火) 01:13:17 (1466d)