読者です 読者をやめる 読者になる 読者になる

ターミナルのvimを手動コピペし易くする

vim terminal

ターミナルのvimで表示している内容をそのままコピペしたい時には普通マウスでチョイチョイっと選択すると思います。
ちょっとした文字列なら問題ありませんが、欲しい内容が複数行の場合だと行番号や余計なスペースまでクリップボードに入ってしまいます(もちろんそういう設定にしていなけば問題ありませんが)。

そんな時は:set nonumberや:set foldcolumn=0などを実行する必要があり、これが大変面倒くさいです。
更に用がすんだら設定を元に戻さないといけません。

このままでは発狂してしまうので、少しでも心の傷を柔げるための簡単なスクリプトを作りました。

nnoremap <silent><F8> :<C-u>call <SID>CopipeTerm()<CR>
function! s:CopipeTerm()
    if !exists('b:copipe_term_save')
        " 値が保存されていなければ保存後に各オプションをコピペ用に設定
        let b:copipe_term_save = {
        \     'number': &l:number,
        \     'relativenumber': &relativenumber,
        \     'foldcolumn': &foldcolumn,
        \     'wrap': &wrap,
        \     'list': &list,
        \     'showbreak': &showbreak
        \ }
        setlocal foldcolumn=0     " 折りたたみ情報表示幅
        setlocal nonumber         " 行番号
        setlocal norelativenumber " 相対行番号
        setlocal wrap             " 折り返し
        setlocal nolist           " 行末やタブ文字の可視化
        set showbreak=            " 折り返し行の先頭に表示されるマーク(こいつだけグローバル設定しかない)
    else
        " 保存されている場合は復元
        let &l:foldcolumn = b:copipe_term_save['foldcolumn']
        let &l:number = b:copipe_term_save['number']
        let &l:relativenumber = b:copipe_term_save['relativenumber']
        let &l:wrap = b:copipe_term_save['wrap']
        let &l:list = b:copipe_term_save['list']
        let &showbreak = b:copipe_term_save['showbreak']
        " 削除
        unlet b:copipe_term_save
    endif
endfunction

コピペ時に邪魔になりそうなオプションを思いつく限りならべてみました。
これでF8を押す度に表示がコピペ用の設定に切り替わったり、元に戻ったりします。
同じキーで2度おいしい動作なので、これでなんとか耐えられるでしょう。

広告を非表示にする