たけっぱ横丁

the technical document for Vim(Editor), Natural Language Proecssing(NLP) tools and Programming(Python, Ruby, C++ etc).

Vimで選択部分のテキストを取得する

Vimで選択した部分を取得する

How to get visual selected text in Vim

vimでscriptを書いていると,選択した部分にのみ結果を反映したいみたいなことがあります.

この方法を自分で色々調べていたのですが How to get visually selected text in VimScrip

こんな資料が見つかったりするわけです.

方法その1 選択部分のエリアを探して,その部分を取得する

function! GetVisualSelection()
    " Why is this not a built-in Vim script function?!
    let [lnum1, col1] = getpos("'<")[1:2]
    let [lnum2, col2] = getpos("'>")[1:2]
    let lines = getline(lnum1, lnum2)
    if lnum1 == 0 && lnum2 == 0 && col1 == 0 && col2 == 0
        return ''
    endif
    let lines[-1] = lines[-1][:col2 - (&selection == 'inclusive' ? 1 : 2)]
    let lines[0] = lines[0][col1 - 1:]
    return join(lines, "\n")
endfunction

だけど,この方法なんだかVimっぽくないと思ったので
自分で色々試行錯誤してみれば,案の定ありました! もっと簡単な方法. それが以下

方法その2(推奨) クリップボードレジスタを使う

clipboarレジスタの設定で

set clipboard=unamed,autoselectplus

が有効になっていれば

以下の方法で選択部分のテキストが取得できます.

let l:text = @*

簡単!

Have a Good Vim Life