Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

fキーをnoremap可能にするfmap.vim

$
0
0

今回の主題 :point_down:

begin.jpg

事前知識 (noremap, fFtT)

Hi, メリークリスマス :snowman:

皆さん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キーへのマッピングを提供します。
例えばあなたが:point_down:の ^ の上(c)にカーソルを乗せている場合

a b c d e
    ^

feキーを押下するとこの :point_down:前方の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
    ^

:arrow_up:
dfd
:arrow_down:

a b  e
    ^

話はもう一度noremapに戻って……

nnoremapはnormalモードに対するキーマッピングの定義で、他には以下の*noremapコマンドがあります。

_ :inoremap: insertモード用
_ :vnoremap: virtual + selectモード用
_ :cnoremap: cmdモード用
_ :tnoremap: terminal
_ :noremap: 全部用

あれ……fnoremapがないよ?

概要

fmap.vimは:FNoremapコマンドを提供します :flushed:

例えば以下のように設定することで

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キーでこのような :point_down:カーソルジャンプをすることができます!

a ( b c d ) e
     ^

:arrow_down:

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の後のキーに対してマッピングを定義するためのプラグインです。

日本語記事の執筆活動の支援を目的に作られました。
ただし機能はもっと一般的なものですので、日本語以外の言語でも役立つでしょう。

よければ使ってね :metal::flushed::metal:

end.jpg


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>