今回の主題 ![]()
事前知識 (noremap, fFtT)
Hi, メリークリスマス ![]()
皆さんnoremapしてますか?
例えばnnoremapはnormalモードに対するキーマッピングを定義する機能で、以下のような機能を実現できました。
" <Space>h, j, k, lでwindowを上下左右に移動する
nnoremap <Space>h <C-w>h
nnoremap <Space>j <C-w>j
nnoremap <Space>k <C-w>k
nnoremap <Space>l <C-w>l
" 各レジスタの内容を表示する
nnoremap <silent> q: :<C-u>register<CR>
--- レジスタ ---
"" ような
"0 Vim Advent Calendar 2018ボツ記事(vital.vimで関数型プログラミング入門)^J
"1 :+1: ^J
"2 ## まとめ^J)"
...
またvimは標準でnormalモードのfキー、F, t, Tキーへのマッピングを提供します。
例えばあなたが
の ^ の上(c)にカーソルを乗せている場合
a b c d e
^
feキーを押下するとこの
前方のeの位置に移動し
a b c d e
^
Fbを押したならこの後方のbの位置に
a b c d e
^
teなら前方のeの手前に
a b c d e
^
Taなら後方のbの手前に移動します。
a b c d e
^
-
f{char}: 後方の{char}に移動 -
F{char}: 後方の{char}に移動 -
t{char}: 前方の{char}の手前に移動 -
T{char}: 前方の{char}の手前に移動
もちろんtextobjとしても使用できます。
a b c d e
^
![]()
dfd
![]()
a b e
^
話はもう一度noremapに戻って……
nnoremapはnormalモードに対するキーマッピングの定義で、他には以下の*noremapコマンドがあります。
_ :inoremap: insertモード用
_ :vnoremap: virtual + selectモード用
_ :cnoremap: cmdモード用
_ :tnoremap: terminal
_ :noremap: 全部用
あれ……fnoremapがないよ?
概要
fmap.vimは:FNoremapコマンドを提供します ![]()
例えば以下のように設定することで
nmap f <Plug>(fmap-forward-f)
nmap F <Plug>(fmap-backward-f)
nmap t <Plug>(fmap-forward-t)
nmap T <Plug>(fmap-backward-t)
" 全角括弧の開き
FNoremap p (
normalモードの fp キーでこのような
カーソルジャンプをすることができます!
a ( b c d ) e
^
![]()
a ( b c d ) e
^
標準のfFtTを潰したくない場合は<leader>f (FtT) にマッピングすると便利です。
nmap <leader>f <Plug>(fmap-forward-f)
nmap <leader>F <Plug>(fmap-backward-f)
nmap <leader>t <Plug>(fmap-forward-t)
nmap <leader>T <Plug>(fmap-backward-t)
事例
fmap.vimはfFtTでひらがな、カタカナ、句読点等を打つのが面倒だったために作られました。
ですので日本語記事の執筆において、特に助けになります。
任せてください。
例えばこんなMarkdownのコードがあったとします。
にこ「ええ! よく『関数型プログラミングにおいて再帰を直に書く必要はなく、畳込みを用いることができる』っていう言論があるけれど、Semigroupを使えば畳み込みすら直に扱わなくていいってことよ」
1行がとっても長くて、特定の場所にジャンプしにくいですね。
行頭から「畳込みを用いることができる」の「畳」にジャンプしたい場合はf(IME切り替え)たたみ(変換)(Enter)(IME切り替え)もしくはf(IME切り替え)、(Enter)(IME切り替え)という長ったらしいストロークが必要です。
これが普通のMarkdown(※)なら、の後に改行を入れてもいいのですが
にこ「ええ!
よく『関数型プログラミングにおいて再帰を直に書く必要はなく、
畳込みを用いることができる』っていう言論があるけれど、
Semigroupを使えば畳み込みすら直に扱わなくていいってことよ」
Qiita Flavor Markdownはなぜかコードの改行に対して実際の改行 (<br/>) を入れてしまうので、そのようにしたくない場合にその手は使えません。
※ CommonMarkのこと
ここでFNoreMap , 、を用いると、f,lのみでジャンプすることが可能になります。
その後fmap.vimはvim標準の;をコロしませんので、f,;lでSemigroupの「S」に飛ぶこともできます。
あるいはfmap.vimはデフォルトで'miで平仮名の「み」にジャンプするマッピングが有効になっているので、「畳」に飛ぶためにf'mihhしてもいいでしょう。
まとめ
fmap.vimはfFtTの後のキーに対してマッピングを定義するためのプラグインです。
日本語記事の執筆活動の支援を目的に作られました。
ただし機能はもっと一般的なものですので、日本語以外の言語でも役立つでしょう。
よければ使ってね ![]()
![]()
![]()

