Skip to content

juro106/ftjpn

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 

Repository files navigation

ftjpn

ftjpn は 日本語編集時のf,t,F,Tを使った移動、削除やヤンク、ビジュアルモードの範囲選択を便利にするための Vim Plugin です。

Vim なのだから 日本語編集のときもftを便利に使おう

日本語編集ではあまり使われないという噂が絶えないftにもっと仕事をしてもらおう、というのがこのプラグインの主旨です。

このプラグインで出来ること・特徴

  • f F t T にまつわる日本語と英語の操作を統一できます。
  • 新たにキーマップを増やさずに済みます。
  • 独自のキー、組み合わせを無数に設定できます。

f.よ、起きて働け もっと働け

日本語(全角文字)の編集でftをまともに機能させるには、その都度IMEを切り替えるか、migemo や digraph を使う必要があります。

これらの方法は英語を使っているときに比べて大幅にタイプ数が増えるのが弱点です。かといって新たにキーをマッピングすると今度は覚える手間が増えます。

日本語のときはf<C-k>_.で英語のときはf.、というように操作が異なるのは混乱の元なので出来れば避けたいでしょう。たとえ短縮のマップを設定したとしても限度があり、根本的な解決にはなりません。

に移動したいのにうっかり <C-k> を忘れて . を押してしまったり、あるいはその逆を…なんてことがあるんじゃないでしょうか。

しかし、このプラグインを使えばf..の両方に移動できるようになる。つまり、英語だろうが日本語だろうが全く同じ動作で仕事が済んでしまうということです。

もちろん「df.まで削除」、「vt.の手前まで選択」といったおなじみの操作も英語のときと同じように違和感なく使えます。まあ素敵。

一人二役の二刀流? いや、もっと働け

オプション: キーの設定

let g:ftjpn_key_list = [
 \ ['.', '。', '.'],
 \ ]

たとえば vimrc で上のように設定すると以下のように動作します。

キー 操作
f. 前方最寄りの. or or に移動
t. 前方最寄りの. or or の手前まで移動
df. 前方最寄りの. or or まで削除
dt. 前方最寄りの. or or の手前まで移動
cf. 前方最寄りの. or or まで削除して挿入モードへ入る
ct. 前方最寄りの. or or の手前まで削除して挿入モードへ入る
yf. 前方最寄りの. or or までヤンク
yt. 前方最寄りの. or or の手前までヤンク
vf. 前方最寄りの. or or まで選択
vt. 前方最寄りの. or or の手前まで選択

1行の中に . が混在している場合、カーソルから最も近い文字が操作対象になります。しかし、そのような状況はほぼ皆無でしょう(このREADMEくらいなものです)。

つまり基本的にデフォルトと同じ。何も変わりません。

FTは後方。;で順方向、,で逆方向へ繰り返し。カウントにも対応しています。

インストール

vim-plug

Plug 'juro106/ftjpn'

キーの設定例

let g:ftjpn_key_list = [
    \ ['.', '。', '.'],
    \ [',', '、', ','],
    \ ['t', 'と'],
    \ ['n', 'に'],
    \ ['w', 'を'],
    \ ['h', 'は'],
    \ ['g', 'が'],
    \ ['d', 'で'],
    \ ['o', 'の'],
    \ ['i', '何'],
    \ ['c', '(', ')'],
    \ ['k', '「', '」', '『', '』', '【', '】'],
    \ ['!', '!'],
    \ ['?', '?'],
    \ [';', '!', '?', '^', '$', '#', ':', '&', '%', '~', '*', '!', '?'],
    \ ]

各リストの先頭の文字がキーになります。

.,以外にもアルファベットや数字、記号、あらゆる文字をいくつでも設定可能です(意味はありませんが全角文字をキーにすることも可能です)。

これによって半角の!で全角のに対しても動作するようになるので、いちいちIMEを切り替えなくてもf!で移動したりdf!で削除、vt!で手前まで選択といったことが可能になります。

t で助詞の1つ前の単語に移動できるとすごく便利

['g', 'が']['t', 'と']['w', 'を']['h', 'は']['n', 'に'] など、文章の中で区切りになりやすい文字を設定しておくと移動がぐんと楽になります。

太郎と花子は新しいソファーを買うために街へ出掛けた。

上のような文章なら twソファーを の1つ前の に移動して ciw。そして テーブル へ書き換え、といった操作がスムーズに行えます。

1つのキーに複数の文字を担当させる

また、キーは必ずしもペアである必要はなく、1つのキー対して複数の文字を設定することも可能です(便利になるかはさておき)。

;に複数の記号を設定しておけば、f;と打つだけで色々な記号に移動できるようになり、打ちにくいシフトキーとのペアを打鍵する手間が省けます(記号だらけの行では却って邪魔になることもあると思いますが)。

f, t, F, Tのキーマッピング

f,t,F,Tを別なキーに設定したい場合。

let g:ftjpn_no_defalut_key_mappings = 1

let g:ftjpn_f = 'f'
let g:ftjpn_F = 'F'
let g:ftjpn_t = 't'
let g:ftjpn_T = 'T'

キーマップを変える場合、vimrcに let g:ftjpn_no_defalut_key_mappings = 1 としてから、各キーを設定して下さい。

欠点: 英語と日本語が混ざっているときがめんどう

例文 1) Hello World. 私は日本人です。東京から来ました。My name is Vim.

カーソルが行頭にあり、私は日本人です。に直接移動したい時。f.と打ってもHello World..が選ばれてしまいます。

こういう場合はf。と打つか(めんどくさい…)、あるいはf. f.(ちょっと大変)と2回続けることでようやく私は日本人です。に移動出来ます。近いほうが選ばれてしまう弊害です。

例文 2) こんにちは世界。I am Japanese. I am from Tokyo. 私の名前はヴィムです。

この場合も同様の困難が待ち受けています。

行頭でf.とすると、こんにちは世界。へと移動してしまいます。I am Jananese..に移動するにはf.を2回繰り返さなければなりません。

もう1つの解決策はfを押して1秒以上待つことです(timeoutやtimeoutlen等の設定を変えていなければ)。そうすればfは通常のfになり、.を押してもは無視されてI am Japanes..へ移動出来ます。

逆に言えばデフォルトのオペレータ待機モードのように永遠に待ってくれず、さっさと入力しないと時間切れになるということです。dfcfyfvfのときも同様です。

さらにもう1つ、これは混乱を招きそうですが.ではないキーに設定してしまえば被ることはなくなります。独自のかな入力を使っている場合などは却って好都合かもしれません。

これらの欠点があなたにとって些細な問題であることを願います。

操作が追いつかない時

f を押してから時間切れまでが短いと感じる時は vimrcset notiemout と記述すれば f の次のキーが入力されるまで永遠に待つようになるのでゆっくり入力できます。

または set timeoutlen=3000 ぐらいに設定するのもひとつの手です(デフォルトは1秒 timeoutlen=1000)。

しかし、ほかに設定しているキーマップが機能しなくなる場合もありますので事前に確認をお願いします。

nnoremap g<C-a> ggVG
nnoremap g<C-a>y ggVGy

上のような設定をしてある状態で set notimeout としてしまうと、g<C-a><CR>を押さない限りいくら待っても発射されなくなります(それだとキーマップの威力が半減どころではありませんよね…)。

キー設定のコツを模索中

feがあまり有効ではないのと同じように、日本語も出現率が高い文字を設定しても役に立たないでしょう。

かといって、そもそもあまり出てこない文字では全く意味がありません。

上手いこと区切りとして優秀な文字を設定できればfの移動がより快適になるでしょう。制限された枠組みの中で最適解を導き出す…ワクワクしますね。

参考までに私が考えた例を掲載します。

S級

日本語 key 候補 意味合い
g Subject, but
w,o Object
h is
t,o and, with
t,e and
n,i to
n,o 's
d,e, by

主語や目的語の近くに現れる文字を設定しておきたいところです。

A級

日本語 key 候補 意味合い
h,e to
d,e by
d,a $
n,a like
b and
s,i do
s,u do,$
r,u do,$
t,a did
k or
k,o thing
y,o by
k,o
m,a

はたくさん出てきますが、案外微妙な場所に出現することが多い印象です。移動した後には当然消去かヤンクをしたいはずなので、「だったら別な場所行くわ」という扱いになってしまいます。

漢字

日本語 key 候補 意味合い
n,i,w what,why
j,z,t,i when
w,h,d who
b,w,a where
t,w,s where
h,o,u how
h,o,u how
=
1
2
3
4
5
6
7
8
9

漢字を目印にするのはあまり上手い作戦ではないような気がしていますが、あればあったで便利かもしれません。

カッコ系

カッコ key 候補
「」 k
k
K
() c
() (
【】 b,
『』 K
‘’ '
“” "
〈〉 <
〔〕
{}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published