2025年01月09日

【薙刀式】新配列普及の敵(壁)はVim説

自作キーボード界隈でもよくこの話が出る。
qwerty前提の配置のVimの操作と競合するから、
qwertyを変えることは出来ないという。
つまり、エディタ操作>文章効率
ということだ。


vimrcというファイルを書き換えることによって、
たとえば大西配列で操作が出来るVimをつくることは技術的にできるらしい。
ちょっと調べても結構むずかしそうだ。
設定項目が多すぎて、
なにがなにやらちょっと理解できないので、
詳しい人たのんだ。

他にもAHKなどで、
Vimにいるときだけ、
エディットモードに入るときにIMEオフしてqwertyに戻して、
文字モードに入るときに大西配列に切り替える、
というスクリプトをつくることは可能だと思う。
しかしVim操作で動く他のソフトもあるらしいので、
それをいちいちAHKに登録して、
その時々で挙動を変えるのを組んでいかないといけないかと予想する。

あるいは、
英語配列はqwertyを甘んじて使うことにして、
IMEオフはqwerty、
IMEオンは新配列、
のようにすると、
いちいち考えなくても済むと思う。
日英共用配列のときは、
日本語のみ使うことになるが。


これらのどれかを選ぶと、
Vimかつ新配列が可能になるはずだけど、
あってるかな。
誰かVimmerかつ新配列使いがいないものか。
カナ配列をつかえ、というのは一つの解で、
英語はqwertyと割り切る、3つめの手段だ。
だけど、そもそもプログラミングやるのに、
英語をqwertyから動かせないというのは、
結構なストレスになるかも知れないねえ。

Vimとqwertyをうまく分離できた人は、
教えてください。
技術的には可能で、
良い解は全然ありそうなんだけど、
やってる例を聞かないのが不思議なんだよな。

新配列に興味のあるエンジニアはちょいちょいいるんだけど、
「いやーVimを捨てられなくて」
という機会損失を防げれば、といつも思うのよね。
エンジニアに新配列を普及するのは、
それだけ「実装できる人を増やす」ということだから、
一般の人に勧めるのとはちょっと違うニュアンスがあるんだよ。
新配列のインフラを増やすには、
インフラをつくれる人にそのメリットにずぶずぶになってもらうのが一番早い。
エンジニアは効率優先だから、
新配列自体には興味があって、
その努力をいとわないことが多いから、
あとはVimとの共存だけなんだよなあ。

Vimmerの方、ご意見もとむ。
posted by おおおかとしひこ at 17:54| Comment(20) | TrackBack(0) | カタナ式 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
自分の.vimrcいじらないvimmerなんかおりゃんとは思いますけど、リモート環境とかで素のvim(vi)を使わなきゃいけない時用かな。会社のqwertyローマ字使わなきゃいけない問題と近似的な。
Posted by ラクダエン at 2025年01月09日 19:21
何度も (非日本語の) non-QWERTY 配列に挑戦して、結局 QWERTY に戻った (かつ vim 使いの) 私が通りますよー。

> vimrcというファイルを書き換えることによって、

それは「できる」と言えばできるのでしょうが、vimrc だけではなく、プラグインも入れている場合はそのプラグインのコードも独自に修正して… 更にプラグインが更新される度に修正すべき箇所を探して…という作業もついてくると思います。

> Vimにいるときだけ、
> エディットモードに入るときにIMEオフしてqwertyに戻して、
> 文字モードに入るときに大西配列に切り替える、
> というスクリプトをつくることは可能だと思う。

その方法だと、多分ターミナル上の vim には対応できないです。

…逆に、キー変換側のプロセス (e.g., xkeysnail, AHK) で IME の状態をチェックする、という方法もあるのですが (実際そのような仕組みのソフトウェアも存在する)、そうするとキーを押下する度に別プロセスを起動して…となって、あんまり美しくはないんですよねぇ (個人の感想です)。私は Linux 上な環境しか分からないのですが、Windows 環境でそんなことができるのかも分からないです。

> カナ配列をつかえ、というのは一つの解で、

まさにそれも (ローマ字に依存しない) かな配列の利点かな、と考えています。

> そもそもプログラミングやるのに、
> 英語をqwertyから動かせないというのは、
> 結構なストレスになるかも知れないねえ。

それは「必ずしもそうではない」というのが私の意見です。そもそもキーボードでガシガシコードを書きまくるだけがプログラミングではなく、デバッグや (過去に自分が書いたものも含む) 既存のコードの調査というのもありますし、場合によってはコードを書く時間よりもそちらのほうが多いこともあります。

なので (純粋なコーディング以外にも) プログラミングをするのに、どの (ような) ツール / プラグインを使うのかが重要になるのですが、その時に non-QWERTY な配列をかなり特殊な vimrc (または NeoVim の init.lua) に記述していると、問題が発生した時に切り分けが難しくなる、というリスクがあり、そちらもストレスになります。
Posted by Akira K. at 2025年01月09日 20:48
>Akira K.さん

僕の知り得ないエンジニアの日常をありがとうございます。
ふだん「Vimで使えないから新配列は…」という言葉の裏にそれだけの文脈が入ってるとは、
素人が読めるわけないので、
もっと説明してほしいよなと思ったりする…
事情は想像できました。
それでも新下駄使うのはメリットがあるから、
と思えるわけですよね。

2枚キーボード使って、
プログラム特化のキーボードと、
文字配列変更したキーボードを両方接続してるのが、
実は一番マシな運用だったりして。
Posted by おおおかとしひこ at 2025年01月10日 09:43
>ラクダエンさん

詳しくはAkira.Kさんが書いてくれてますが、
そんなのもはやqwerty専用環境じゃん、
って感じですねー。

車の整備する人に、新規格のネジを持ってきました、
アダプタつければ大丈夫でしょ?
くらい意味のないことかもしれません。
いや、全部変えれば変えれるけどくらいな。
Posted by おおおかとしひこ at 2025年01月10日 09:47
> それでも新下駄使うのはメリットがあるから、
> と思えるわけですよね。

それは「(日本語の IME で実現された) ローマ字に依存しない新下駄配列だと Vim などと競合しにくい」というのが大きいと思います。

このへん話し始めると長くなるので、もしかしたら Podcast とかで話したりするかも知れません。
Posted by Akira K. at 2025年01月10日 09:53
>Akira K.さん

なるほど、それがIMEで何やらやろうとしていることの理由なのかな。
面白そうな話なので、
どこかにまとめておくべき内容かと思います。
Posted by おおおかとしひこ at 2025年01月10日 10:18
大西配列でvimをつかっていますが、ショートカットの割り当て先の文字に意味があれば(":w"のように書き込み=Writeのようなもの)そのままにして、意味がなければ(hjklなど)変えてしまっています。

ただ一部のプラグイン(ファジーファインダー系)はhjklの再割り当てができなさそうなのですが、これも普通に文字入力すればなにも問題ないです。

素のvimを触るときに関しては実際困りますが、新配列を触ってみてvimで困ると言っている人は大抵が闇の力に染まったvimを使っているように見えます(ガバガバ統計)

総評として新配列に馴染めなくて言い訳としてvimに全責任を押し付けているだけに思います。

実際のところはわかりませんが。
Posted by まき at 2025年01月15日 10:46
>まきさん

そもそもVimって一個じゃなくて他もあるのか、
ってのを最近知ったので、
Vim用レイヤーをキーボード側につくればいいじゃんって思ってるのが現在地点ですかねー。

大西配列でVim行けるよ、Vimを改造すればね、
と言ってる人がほぼいないので、
サンプルが1増えただけでも参考になります。
(真のVimを使ってないからだ、とVim勢はいうかもですが、
そこからは宗教戦争になりそうだなあ)
Posted by おおおかとしひこ at 2025年01月15日 11:19
大分間が空いてしまいましたが、喋ってみました: https://kirameister.github.io/episode/26
Posted by Akira K. at 2025年01月25日 08:09
>Akira K.さん

いろんな遍歴があって大変面白かったです。

要件定義としては、
・Vimバインドは絶対
・日本語入力で英語を入力しちゃった時に復元したい
 (逆も?)
・英語と日本語は同じくらい打ちたい
・明示的に英数/かなを指定してからやる方式は微妙
 (同時打鍵だったから説もなくもない?)
・文脈判定したい
てな感じですかねえ。

僕の要件定義は、
・日本語99%
・英語はqwertyでいいや
・Vim的な操作(Adobe系)をしたいときは、
 英数に明示的に切り替えてIMEオフしてからqwertyで
・日本語を呼び出したい時は明示的にIMEオンしてから打つ
という風に切り分けてます。

日本語と英語がIMEのオンオフでごちゃったときも、
「イライラしながらあきらめる」を選択してますね。

フォーカスウィンドウを変えた時、
WindowsではグローバルにIMEオンオフを管理できず、
ローカルウィンドウごとにIMEの状態を持っていて、
今どっちかは打ってみるまで分からないシュレディンガー状態なのですが、
明示的に最初にオンかオフかを打つ癖がついてるので、
打ち忘れた時だけイライラしています。笑


で、僕の事情よりも相当入り組んでるから、
IMEでやるしかないんだろうなー、と思って聞いてました。
できる人がやるべきなので、見事突破してくれることを、
出来ない人々は応援するしかないです…

なんか結局「英語で完結してるキーボード上に、
日本語入力はまだうまく住み着いてない」って感覚がありますねー。


ちなみに薙刀式の登場は2018年です。
僕がqwertyにイラついてカタナ式をつくったのが2017年。
なので配列界隈では僕は新参者だったりします。
Posted by おおおかとしひこ at 2025年01月25日 10:21
> ・日本語入力で英語を入力しちゃった時に復元したい(逆も?)

そういえば、逆に日本語を入力したいのに、ASCII な文字が表示されて嫌な思いをする、というのはあまり記憶にないです。

> ・英語と日本語は同じくらい打ちたい

うーん、仕事かプライベートかで分かれるのですが、英語でのタイピングのほうが多いような気がします。

> なんか結局「英語で完結してるキーボード上に、
日本語入力はまだうまく住み着いてない」って感覚がありますねー。

新下駄配列の実装系は、個人的に mozc / Google-IME にて一旦クローズしたというか、終わった話で…っていい加減独自の IME を一定以上完成させたいのですが、なかなか進んでおりませぬ…。
Posted by Akira K. at 2025年01月25日 10:45
>Akira K.さん

>新下駄配列の実装系は、個人的に mozc / Google-IME にて一旦クローズした

なるほど一旦安定したってことですね。
(誰か…3キー同時の実装を…)
IMEレベルでやるのが一番スマートだと思ってるので、
それが出来るに越したことはないですよねー。

IMEを独自で作るって何をやればいいのかすら分からんので、
いろいろ頑張ってくださいとしか言いようがない…笑
Posted by おおおかとしひこ at 2025年01月25日 10:56
> (誰か…3キー同時の実装を…)

/z/+/d/+/l/ => "→" というような意味での 3 キー同時打鍵は既に実装されております。具体的には以下のページの "roman_table" から「新下駄配列_US_3キー同時打鍵」で選択できます。

https://colab.research.google.com/drive/1yrMHatUh0UUdinRgZhoObCaV2i3JTXlc?usp=sharing

親指を使った 3 キー同時という意味であれば… もしかしたら私以外の誰かが実装するかも知れません。
Posted by Akira K. at 2025年01月25日 11:08
位置で覚えているコマンドとと文字で覚えているコマンドが混在しているのがネックです

一時期Dvorakでvimを使っていました
vimはQWERTYで覚えていたので移行に苦労しましたね
位置が身についているキーと文字で覚えているキーが混在してるのが最大のネックでした

1例としては、
カーソル移動(QWERTYのHJKL)は位置で覚えていたので、DvorakのDHTNをカーソル移動に割り当てようとしましたが
すると、文字で覚えている、文字列検索中の「次へ移動」のN(NextのN)をどうしようかという問題にぶち当たりました
QWERTYのN(DvorakのB)を割り当てたら、今度は1単語前に移動するB(BackのB)をどうにかする必要があり・・・と連鎖していき
試行錯誤の上、最終的にDvorakのHJKL(QWERTYのJCVP)でカーソル移動するのが一番マシでした


Posted by あす at 2025年01月25日 11:14
>あすさん

なるほど、位置で覚えてるのが全部じゃないのか。
それが全ての元凶な気がする…

僕は脳内発声がないので、
ctrl+ZXCVは位置で記憶してます。
なのでここにどんな文字が入っても位置記憶でやると思います。

意味で覚えてる場合は、たとえばPhotoshopのV(移動)とかは、
脳内発声で指差し確認的な工程が挟まります。

脳内発声がある人は全部アルファベットを発音してるのだろうか…


薙刀式の編集モードは、
全て位置記憶で可能なように作っています。
その辺の設計思想の整理から、
というのはありそうですね。
Posted by おおおかとしひこ at 2025年01月25日 11:58
>Akira K.さん

おっ、そうだったんですか。
知らなかった。情報ありがとうございます。
とはいえローマ字テーブル的な実装だろうな…

「DFを押しながらJ」
(組み合わせは6通り許容、ないし順番も定義可能)
みたいなのに対応するには、
ローマ字テーブルだけじゃ実装できなさそうだ…
Posted by おおおかとしひこ at 2025年01月25日 12:00
>>その辺の設計思想の整理から
まさしくその通りで、新配列でvimをそれまで通りに扱おうとすると、キーバインドをほぼ丸々設計し直す必要が出てきて、それはもはやエディタの設計であり、楽をするための配列変更のためにそんな労力は支払えない、というのが結論でした

ちなみに
>>DvorakのHJKL(QWERTYのJCVP)でカーソル移動
を始めとした
「Dvorakの配置でvim操作」自体は、慣れるのに少しかかりましたが
慣れてしまえば割といい感じでしたよ
Posted by あす at 2025年01月25日 15:06
>あすさん

CVが並んでたのが偶然よかったのか…
これがもっとバラバラならどうなってたんでしょうねえ…
Posted by おおおかとしひこ at 2025年01月25日 20:08
> 「DFを押しながらJ」
> (組み合わせは6通り許容、ないし順番も定義可能)
> みたいなのに対応するには、
> ローマ字テーブルだけじゃ実装できなさそうだ…

「押しながら」というのが同時打鍵を指しているのであれば現状の mozc/GoogleIME でも 3! = 6 通りの (順列で) 異なる定義が可能です (元々ローマ字テーブルでは順列のように定義しているところ、わざと組み合わせのように記述しているため)。
Posted by Akira K. at 2025年01月26日 04:49
>Akira K.さん
>> 「DFを押しながらJ」
これは同時打鍵ではなく、
DFをシフトキーのように思って押すイメージです。
タイムアウトは無限、キーリピートも発生なしで。
薙刀式の編集モードは、
このような「DFを押しっぱなしにした状態で」
色んなキーを押す方式です。

さらに、普段は同時打鍵と分かりやすくいってますが、
ほんとうは「それぞれのキーをシフトキーのように思って押す、
順番は2!、3!を許容」というアルゴリズムで判定しています。
これを「相互シフト方式」となづけました。

これは3キー同時押しが難しいため、
「ABCが同時に押されてる瞬間さえあればOK」
と入力を楽にするためです。
このため、離し入力時に判定しています。

編集モードも同じで、実は押す順番はバラバラでOKです。

なので、IMEレベルでは難しいだろうな、
と想像しました。
そこまでやれちゃうならありがてえけど…
Posted by おおおかとしひこ at 2025年01月26日 08:16
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック