主にVIMを使用する方法であるパテでは、次のことができます。
- ページアップ/ダウン:ネイティブのページアップ/ダウンキーを使用します。Macでは、代替はFn + Up / Downであり、ターミナルでは機能しません(vimファイル内ではスクロールしませんが、ターミナルバッファーはスクロールします)
- 同様に、Fn +右/左キーを押しても行の開始/終了に移動しません
Mac OS Xでこの機能をエミュレートするにはどうすればよいですか?
主にVIMを使用する方法であるパテでは、次のことができます。
Mac OS Xでこの機能をエミュレートするにはどうすればよいですか?
回答:
これは特にMacの質問ではなく、実際にはviの質問です。
ナビゲーションモードでは、ctrl-fはページを下にスクロールし、ctrl-bはページを上にスクロールします(「F」または「B」ackと考えてください)。Ctrl-dは半ページ下にスクロールし、ctrl-uは半ページ上にスクロールします。
^は、行の先頭に移動し、$を末尾に移動します。私は知っていますが、それには歴史的な理由があります。
以下は、viコントロールに関する非常に優れたチートシートです。viは少し難解ですが、一度内部化すると、世界で最も速くて滑らかなテキストエディターになります。
ターミナルのデフォルトの設定ではマップShift- Page UpとShift- Page Downスクロール(へのVimとEmacsのようなプログラムを教えて文字列にESC [ 5 ~
してESC [ 6 ~
)。
これらのキーがShift修飾子なしで文字シーケンスを端末に送信するようにする場合は、キーボードマップをカスタマイズできます。
ターミナル>設定>設定> [プロファイル]>キーボード
これを行う場合Shiftは、シフトされたキーとシフトされていないキーのマッピングを交換することにより、これらのキーの修飾子の意味を逆にすることをお勧めします。また、[表示 ]メニューを参照してください。このメニューには、Command修飾子を使用するスクロールコマンドが含まれているため、端末のキーボードマップに関係なく使用できます。
同様に、Shift- HomeとShift- Endは、現在の行(ESC [ H
およびESC [ F
)の開始/終了に移動するようにマップされます。これらのシーケンスはBashによって理解されますが、Vimをカスタマイズしてそれらを理解するか、Vim専用のマッピングを編集する必要があります。Vim、Emacs、および他のいくつかのプログラムは、ホーム/エンドキーがESC O H
とを送信する「アプリケーションカーソルモード」に端末を置くためにエスケープシーケンスを送信しますESC O F
が、端末(10.9現在)はこの動作を実装しません。そのため、キーボードマップを変更して、代わりにこれらの他のコードを送信することもできます(Bashも理解しています)。(他のOSではHome、End行の開始/終了に使用されるため、ターミナルはShift対称性のための修飾子を提供します。)
Control- Left ArrowおよびControl- Right Arrowは、デフォルトで「行頭/行末に移動」シーケンスにもマッピングされますが、Shift- HomeおよびShift-にマッピングされたシーケンスとは異なりますEnd。代わりに、それらはEmacsおよびBash互換のシーケンスESC [ 5 D
およびにマップされますESC [ 5 C
。これらがVimで使用されていないと仮定すると、最も簡単なアプローチは〜/ .vimrcを使用してVimをカスタマイズしてこれらを受け入れることです。
MacOSののより最近のバージョンでは、ターミナルはもはやための明示的なマッピングがあることに注意してくださいHomeとEnd、デフォルトで設定でを。代わりに、代替画面がアクティブなときにキーが自動的に開始/行末にマップされる動的な動作があります。たとえば、emacs、vim、screen、tmuxなどのフルスクリーンアプリケーションを使用する場合です。メイン画面でシェルのような行指向のプログラムを使用する場合、デフォルトでは端末ビューをスクロールし続けます。Shift修飾子は動作を反転します。
\033[5~
PageDown / Up に追加(および... 6。)する必要がありました。
Home / Endに慣れていたので、挿入モードで行の先頭と末尾に移動できました(Windowsでの使用とLinuxの使用から)。これはMacではサポートされていません。リモートシステムでvimを使用している場合、簡単に実行することもできないため、これは特に面倒です。いくつかの痛みを伴う試行錯誤の後、私.vimrc
は同じことをするいくつかの行を思いつき、最終的にここで同様の解決策を思いついた他の誰かを見つけました:
https://coderwall.com/p/fd_bea
楽しい。
:inoremap <C-e> <C-o>$
:inoremap <C-a> <C-o>0