デフォルトのkshを使用しています OpenBSD 6.2(pdkshに基づく) )Viコマンドライン編集モードが有効になっている。
hを補完するものとして矢印キーを正しく機能させようとしています。 、 l 、 j およびk (私はDvorakキーボードを使用しているため)。私の知る限り、それらはまったく機能しません。 「入力」モードか「コマンド」モードかは関係ありません。
現在のキーバインディングには次のものが含まれます:
^[[A = up-history
^[[B = down-history
^[[C = forward-char
^[[D = backward-char
これらは、 Ctrl + V を使用した場合に、矢印キーによって生成される文字シーケンスでもあります。 矢印キー 。
矢印キーはEmacsコマンドライン編集モードでは期待どおりに機能しますが、長年のViユーザーとして、それを使用するとやや不自由に感じます。
矢印キーで送信されるエスケープは、 Escを押したかのように解釈されると思います。 …手動で入力すると、同等の動作が得られます。 Esc [ A 上矢印を押したときのように (私をコマンドモードにしてから、行末で挿入モードにします。)
質問:OpenBSDのkshのViモードで矢印キーを直感的に動作させることができた人はいますか? ?
承認された回答:
/usr/src/bin/kshにすばやく侵入しました 私のOpenBSDシステムでは、とにかく実際のソースをチェックアウトしていたので見てください。 c_ksh.cをざっと見ました 、emacs.c およびvi.c Viモードがpdkshに後付けされたかのように見えます nshから ある時点(1989/1990年頃)。使用されている正確な単語は
/* $OpenBSD: vi.c,v 1.55 2018/01/16 22:52:32 jca Exp $ */
/*
* vi command editing
* written by John Rochester (initially for nsh)
* bludgeoned to fit pdksh by Larry Bouzane, Jeff Sparkes & Eric Gisin
*
*/
bind -可能な関数はすべてemacs.cにあります 、x_bind()も同様です bindによって呼び出される関数 ビルトイン、vi.c x_bind()から呼び出されない異なる名前でそれらのいくつかの独自の実装を持っているようです 。
したがって、bindは、 ビルトインは、この特定のシェルのViモードでは動作しません。
更新(2018-02-04):これをopenbsd-miscに報告した後 リスト、bind 実際、Viコマンドライン編集モードでは何もしません。 kshを変更するためのパッチが適用されます これが言及されるようにOpenBSDのマニュアル:
bind string=[editing-command] ...Emacs編集モードの場合 、指定された編集コマンドは
指定されたstringにバインドされます 。stringの将来の入力
編集コマンドがすぐに呼び出されます。 Vi編集モードでは
バインドは
効果がありません 。