Meguro.vimでVim scriptをもくもく

はじめに

2017-12-16(Sat.) Meguro.vimに参加してもくもくしてきたので参加レポートをば

Meguro.vim#7

megurovim.connpass.com

Vim 好きな人が集まって、もくもく作業しつつ交流する会、とのことです。
最近何かとVim(とVimに関するイベント)に関わることが多いので、この機会にVim scriptをきちんと学び直したいなと思い、参加しました。

会場

Megurorbに引き続きアカツキさん
f:id:kazu9su:20171216231150j:plain

相変わらず広い & 快適
13時 ~ 18時30分までひたすらもくもく。

やったこと

僕は今回、ひたすら下記本を読み進めました。

Vim script テクニックバイブル ~Vim使いの魔法の杖

Vim script テクニックバイブル ~Vim使いの魔法の杖

体系的に学ぶことで、今まで雰囲気で使っていたものをキチンと理解できます。
また、個人的に少し苦手だと思っていた画面(バッファ?)に対して操作をするようなことも、けっこう簡単にできるんだなという発見がありよかったです。
せっかくなので具体例を紹介したいと思います。

  1. append(), setline()
    appendは指定した行の下に文字列を挿入
    setlineは強制的に指定した行を上書きします f:id:kazu9su:20171217001638g:plain
  2. submatch()
    submatch()は正規表現でマッチした表現を取り出します。これを式に使うと強力です f:id:kazu9su:20171217002214g:plain
  3. bufwinnr()
    bufwinnr()にバッファの名前を渡すと、バッファの番号が取得できます。これを利用してこんな関数を書くと、名前を指定してカレントバッファを切り替えることができます。
function! GotoWin(name)
    let nr = bufwinnr(a:name)
    if nr > 0
        execute nr . 'wincmd w'
    endif
    return nr
endfunction

f:id:kazu9su:20171217003749g:plain 4. nnoremap
.vimrcでおなじみ、nnoremapでキーにオリジナル関数を当てはめれば、簡単に面白い動作をしてくれます。

nnoremap R :call <SID>ReverseCurrLine()<CR>

function! s:ReverseString(str)
    return join(reverse(split(a:str, '\zs')), '')
endfunction

function! s:ReverseCurrLine()
    let lnum = line('.')
    call setline(lnum, s:ReverseString(getline(lnum)))
endfunction

f:id:kazu9su:20171217003310g:plain

もくもく後

f:id:kazu9su:20171217004122j:plain
成果発表などしてご飯食べに行って解散しました。
個人的にはとても進捗したのでまた参加したいです。
おわり