日本語の分かち書きを実現する Neovim のプラグインである TinySegmenter.nvim を使って Word Motion を拡張し、日本語の文章で単語単位の移動を実現する Neovim のプラグインです。
日本語の文章を対象にして Neovim の本来の Word Motion を実行すると、「漢字・ひらがな・カタカナ」が移動の区切りとなるため、英語の文章を対象にしたときのような単語単位での移動にはなりません。例えば、以下の例文で Word Motion を実行した時の移動は次のとおりです。一行目が例文、二行目がカーソルの移動場所を |
で示したものです。
今回は、2020年のアドベントカレンダーの記事で「設計中です」としていたキーボードについて、やっと自分なりに満足できる形になってきましたので、このキーボードの設計の意図なんかを書いていきます
今回|は|、|2020|年|の|アドベントカレンダー|の|記事|で|「|設計中|です|」|としていた|キーボード|について|、|やっと|自分|なりに|満足|できる|形|になってきましたので|、|この|キーボード|の|設計|の|意図|なんかを|書|いていきます
一方、TinySegmenter.nvim で同じ文章を分かち書きすると、以下のとおり分割できます。
{ "今回", "は", "、", "2", "0", "2", "0", "年", "の", "アドベントカレンダー", "の", "記事", "で", "「", "設計", "中", "です", "」", "と", "し", "て", "い", "た", "キーボード", "について", "、", "やっと", "自分", "なり", "に", "満足", "できる", "形", "に", "なっ", "て", "き", "まし", "た", "の", "で", "、", "この", "キーボード", "の", "設計", "の", "意図", "なんか", "を", "書い", "て", "いき", "ます" }
この分割結果に基づく移動を実現するのがこのプラグインの役目です。このプラグインを使って移動すると、以下のように単語単位でカーソルを移動できます。
今回|は|、|2|0|2|0|年|の|アドベントカレンダー|の|記事|で|「|設計|中|です|」|と|し|て|い|た|キーボード|について|、|やっと|自分|なり|に|満足|できる|形|に|なっ|て|き|まし|た|の|で|、|この|キーボード|の|設計|の|意図|なんか|を|書い|て|いき|ます
lazy.nvim を使う場合、~/.config/nvim/lua/plugins/extend_word_motion.lua
を作成して以下のとおり設定します。その他のプラグインマネージャーを使っている場合、それぞれのマネージャーの手順に沿ってインストールしてください。
return {
's-show/extend_word_motion.nvim',
opts = {},
dependencies = {
'sirasagi62/tinysegmenter.nvim'
},
}
上記の opts.extend_word_motions
には、拡張したい Motion を指定します。何も設定しない場合、デフォルトで w
, b
, e
, ge
が指定されます。
拡張する Word motion を一部の Motion に限定できます。その場合 ~/.config/nvim/lua/plugins/extend_word_motion.lua
の opts
に拡張したい Motion を指定します。
return {
's-show/extend_word_motion.nvim',
opts = {
-- 拡張する Motion を `w`, `b`, `e` に限定
extend_word_motions = { 'w', 'b', 'e' }
},
dependencies = {
'sirasagi62/tinysegmenter.nvim'
},
}