OSXのVim:ターミナルで開かれたvimファイルを介してページアップ/ページダウン/ EOLを実行する方法


28

主にVIMを使用する方法であるパテでは、次のことができます。

  • ページアップ/ダウン:ネイティブのページアップ/ダウンキーを使用します。Macでは、代替はFn + Up / Downであり、ターミナルでは機能しません(vimファイル内ではスクロールしませんが、ターミナルバッファーはスクロールします)
  • 同様に、Fn +右/左キーを押しても行の開始/終了に移動しません

Mac OS Xでこの機能をエミュレートするにはどうすればよいですか?


「Fn +右/左」を「Home / End」に置き換えたり、追加したりすると、質問を明確にするのに役立ちます。これは、これらのFnの組み合わせの機能です。
クリスページ

回答:


48

これは特にMacの質問ではなく、実際にはviの質問です。

ナビゲーションモードでは、ctrl-fはページを下にスクロールし、ctrl-bはページを上にスクロールします(「F」または「B」ackと考えてください)。Ctrl-dは半ページ下にスクロールし、ctrl-uは半ページ上にスクロールします。

^は、行の先頭に移動し、$を末尾に移動します。私は知っていますが、それには歴史的な理由があります。

以下は、viコントロールに関する非常に優れたチートシートです。viは少し難解ですが、一度内部化すると、世界で最も速くて滑らかなテキストエディターになります。


1
「これは具体的にはMacの質問ではありません。これは本当にviの質問です。」これは主にMac OS Xターミナルアプリケーションのキーマップの設定方法に関するものですが、行の開始/終了に関する質問の2番目の部分には既にターミナルでマッピングがあり、1つの可能な解決策はviのマップを編集することですそれを理解します。または、ターミナルのキーボードマップを編集することもできます。
クリスページ

16

ターミナルのデフォルトの設定ではマップShift- Page UpShift- Page Downスクロール(へのVimとEmacsのようなプログラムを教えて文字列にESC [ 5 ~してESC [ 6 ~)。

これらのキーがShift修飾子なしで文字シーケンスを端末に送信するようにする場合は、キーボードマップをカスタマイズできます。

ターミナル>設定>設定> [プロファイル]>キーボード

これを行う場合Shiftは、シフトされたキーとシフトされていないキーのマッピングを交換することにより、これらのキーの修飾子の意味を逆にすることをお勧めします。また、[表示 ]メニューを参照してください。このメニューには、Command修飾子を使用するスクロールコマンドが含まれているため、端末のキーボードマップに関係なく使用できます。

同様に、Shift- HomeShift- Endは、現在の行(ESC [ HおよびESC [ F)の開始/終了に移動するようにマップされます。これらのシーケンスはBashによって理解されますが、Vimをカスタマイズしてそれらを理解するか、Vim専用のマッピングを編集する必要があります。Vim、Emacs、および他のいくつかのプログラムは、ホーム/エンドキーがESC O Hとを送信する「アプリケーションカーソルモード」に端末を置くためにエスケープシーケンスを送信しますESC O Fが、端末(10.9現在)はこの動作を実装しません。そのため、キーボードマップを変更して、代わりにこれらの他のコードを送信することもできます(Bashも理解しています)。(他のOSではHomeEnd行の開始/終了に使用されるため、ターミナルはShift対称性のための修飾子を提供します。)

Control- Left ArrowおよびControl- Right Arrowは、デフォルトで「行頭/行末に移動」シーケンスにもマッピングされますが、Shift- HomeおよびShift-にマッピングされたシーケンスとは異なりますEnd。代わりに、それらはEmacsおよびBash互換のシーケンスESC [ 5 DおよびにマップされますESC [ 5 C。これらがVimで使用されていないと仮定すると、最も簡単なアプローチは〜/ .vimrcを使用してVimをカスタマイズしてこれらを受け入れることです。

MacOSののより最近のバージョンでは、ターミナルはもはやための明示的なマッピングがあることに注意してくださいHomeEnd、デフォルトで設定でを。代わりに、代替画面がアクティブなときにキーが自動的に開始/行末にマップされる動的な動作があります。たとえば、emacs、vim、screen、tmuxなどのフルスクリーンアプリケーションを使用する場合です。メイン画面でシェルのような行指向のプログラムを使用する場合、デフォルトでは端末ビューをスクロールし続けます。Shift修飾子は動作を反転します。


@MarkHu最後の段落でそれを取り上げました。
クリスページ

最後の段落で部分的に説明したように、MacOSの他のバージョンではデフォルトが異なる/欠落している場合があります。10.13.6では、\033[5~PageDown / Up に追加(および... 6。)する必要がありました。
MarkHu

2

最も簡単で最適なソリューションはn+です。ここnで、下に移動する行の数を指定します。これが下キーです。

私は定期的に12+ 22+を繰り返します。


1

Home / Endに慣れていたので、挿入モードで行の先頭と末尾に移動できました(Windowsでの使用とLinuxの使用から)。これはMacではサポートされていません。リモートシステムでvimを使用している場合、簡単に実行することもできないため、これは特に面倒です。いくつかの痛みを伴う試行錯誤の後、私.vimrcは同じことをするいくつかの行を思いつき、最終的にここで同様の解決策を思いついた他の誰かを見つけました:

https://coderwall.com/p/fd_bea

楽しい。

:inoremap <C-e> <C-o>$
:inoremap <C-a> <C-o>0
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.