web-dev-qa-db-ja.com

OSXのVim:端末で開いたvimファイルを使用して、ページアップ/ページダウン/ EOLに移動する方法

私が主にVIMを使用していたPuTTYでは、次のことができます。

  • Page up/down:ネイティブのPage up/downキーを使用します。 Macでは、代替手段はFn + Up/Downです。これはターミナルでは機能しません(vimファイル内ではスクロールせず、ターミナルバッファーをスクロールします)。
  • 同様に、Fn +右/左キーを押しても、行の最初/最後に移動しません

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

30
TCSGrad

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

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

^は行の先頭に移動し、$は最後に移動します。わかっていますが、歴史的な理由があります。

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

51
Dan Ray

端末のデフォルト設定マップ Shift-Page Up そして Shift-Page Down VimやEmacsなどのプログラムにスクロールするように指示する文字シーケンス(ESC [ 5 ~およびESC [ 6 ~)。

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

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

これを行う場合、私はあなたの意味を逆にすることをお勧めします Shift これらのキーの修飾子は、シフトされたキーとシフトされていないキーのマッピングを交換することにより、代替の動作が引き続き使用できるようにします。また、Viewメニューも参照してください。このメニューには、 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 修飾子は動作を反転させます。

16
Chris Page

最も簡単で最適なソリューションはn + 、ここでnは、下げたい行数であり、は下キーです。

私は定期的に12 + および22 +

2
T.Woody

私はHome/Endに慣れていましたが、Macではサポートされていない挿入モード(Windowsでの使用とLinuxでの使用から)で行の最初と最後に移動しました。リモートシステムでvimを使用しているときも、簡単に実行できないため、これは特に厄介です。辛い試行錯誤の末、いくつかの.vimrc同じことを行う行。最終的には、ここで同様の解決策を考え出した誰かが見つかりました。

https://coderwall.com/p/fd_bea

楽しい。

:inoremap <C-e> <C-o>$
:inoremap <C-a> <C-o>0
1
user1442960