Vimでカーソルを動かさずに画面を動かす方法は?


598

私は最近、カーソルを移動せずに 1行のステップで画面を上下に移動するVimのCtrl+ EおよびCtrl+ Yショートカットを発見しました。

カーソルをそのままにして、カーソルのある行が最初の行になるように画面を移動するコマンドを知っていますか?(最後の行にコマンドがあることは素晴らしいボーナスです)。

手動でCtrl+ E(またはCtrl+ Y)を適切な回数押すことでこれを実現できますが、これを直接実行するコマンドがあると便利です。

何か案は?


この質問はVimセクションにあるべきではありませんか?
ジョン

回答:


877
  • zz-現在の行を画面の中央に移動します
    注意しzzてください。Caps Lock誤ってオンにした場合は、保存して終了しvimます!)
  • zt -現在の行を画面の上部に移動します
  • zb -現在の行を画面の下部に移動します

9
@HappyGreenKidNapsマップは、できるだけ早く制御するためのロックキーをキャップします。
アーロン

特に多くのCマクロを扱う場合、私は大文字のロックにかなり執着していますが、他のオプションがあります。最初に、マッピングされていないキーを見つけ(文字の両方のケースを確認し、記号またはファンクションキーを使用して修飾子またはリーダーを追加してみてください)、大文字と小文字を区別する「危険な」組み合わせにマッピングします。次に、vimundoを好みに合わせて構成して、oopsから回復できるようにします。(非移植ハッキング着信:) 3番目に、同じことを行いますが、ユーザーのキーボード構成(Windowsキー+ Zなど)から行います。シーケンスへのマップについては、xdotoolまたはを試してくださいtriggerhappy。最後に、Caps Lock状態を表示します(Vimscriptでは実行できません)...
John P

2
Caps Lock状態のクエリは、環境に大きく依存します。Vimscriptではそれができないと聞いたことがありますが、現時点では受け入れています。あなたは道路が、そこだとダウンに行きたい場合はxev -qcat /proc/bus/input/devicesクエリにデバイスを見つけ、evtestまたはthd ... --dump /dev/input/event<#>など、状態を確認するために、あなたは絶対にシステム全体の再マッピングをしなければならない場合は、少なくともスワップキャップのような2つのロック< - > NUM -しかし、問題はそれがオンであることをもっと忘れています。以前にそれが欲しかったのなら、どんなマップでもそれを使い続けるからです。ファイル/ユーザー/システムの前にVimを壊す危険があります。
John P

その他のVimスクリプトオプション:「確認」をオンにして、終了/脱退などを確認します。書くために、あなたはBufWritePreのためのオートコマンドが必要になると思いますconfirm()。また、Caps Lockをctrlにマッピングする代わりに、Vimによって理解されているがマッピングされていないキーまたは組み合わせにマッピングし、手動で、またはgithub.com/tpope/のようなものを使用して、挿入/置換モードでのみCaps Lockをエミュレートできます。vim-capslock。あなたは、おそらく外のVimそれを必要とするが、あなたがしなければ、あなたの変更を元に戻す、または、独自のプログラムサポートのマッピングかどうかを確認するためにxmodmapをスクリプトを書きません(とメイクノート。)
ジョン・P

3
zt / zz / zb-​​カーソルを固定して画面をt op / center(german: ' z entrum')/ b ottom <---> H / M / Lに固定し、カーソルをH igh / M中央に移動/ ローポジション
エリ

626

さらに:

  • Ctrl- y画面を1行上に移動します
  • Ctrl- e画面を1行下に移動します
  • Ctrl- uカーソルと画面を上に移動½ページ
  • Ctrl- dカーソルと画面を½ページ下に移動
  • Ctrl- b画面を1ページ上に移動し、カーソルを最後の行に移動します
  • Ctrl- f画面を1ページ下に移動し、カーソルを最初の行に移動します

Ctrl- yCtrl- eカーソルが画面の外に移動した場合にのみ、カーソルの位置を変更します。

礼儀http://www.lagmonster.org/docs/vi2.html


91
@ulidtko:efter(スウェーデン語の後)、yore(過去を意味する)、上、下、後ろ、前。(前後の言葉は上下よりも長いため、当然、画面がより長く移動します)
Moberg

12
昨日はニーモニックの方がいいので、昨日は^^
Moberg

Ctrl-uとCtrl-dの両方がカーソルを移動します: " カーソルはファイル内で同じ行数だけ上に移動します(可能な場合、行が折り返され、ファイルの終わりに到達したときに違いがある場合があります)。 "
レックスR

@LexRに感謝します。その違いを反映するように回答を更新しました。
Paul Wheeler

1
:help CTRL-E言うMnemonic: Extra lines.
Niko Bellic

39

Vimはカーソルが常に現在の画面にあることを要求しますが、現在の位置をブックマークにブックマークしてから、元の場所に戻ることができます。

mg  # This book marks the current position as g (this can be any letter)
<scroll around>
`g  # return to g

1
ブックマークされた行に行くことだけを気にする場合は、 'g
Matt Briggs

4
「Vimは常に現在の画面にカーソルがある必要があります」Vimのユーザーは、すべてがvimで構成可能であることを自慢します。これは違います。ファイルをスクロールしている間、カーソルを動かしたくありません。Dealbreaker for me
gadelat

8
カーソルが見えないところにカーソルを置きたいと思ったことがありません。確かに、スクロールするとカーソルが動きますが、簡単なところに戻ることができます(推測ではなく、実際の場所を確認できます)。あるものには2つのバックティック、もう1つのCtrl-O本当に素晴らしいものには "バックティック、ピリオド"を使用すると、最後に編集していた場所に戻ります。
ダッシュトムバン2016年

3
@gedalat、他のエディターではスクロールして離れるときに非常に迷惑です。カーソルがどこにあるかわからないので、カーソルを元に戻すためにマウスを使用してどこかをクリックする必要があります。または、「ここ」にいると思って入力を開始すると、カーソルがあった場所に突然ジャンプします。その時点では、カーソルの位置しか追跡されないため、スクロールした場所にジャンプすることはできません。カーソルを移動先に追従させることは、間違いなく良いことです。
Shahbaz

1
構成可能です、@ gadelat。この答えをマッピングするだけです(位置をmgでマークし、スクロールして移動し、マークを付けて移動'gします。これで完了です。これで、構成可能なキーを呼び出して移動することができ、カーソルが現在の位置から離れたことがないように感じます。Voilá!
ベコ博士

18

これがvimrcの私の解決策です:

"keep cursor in the middle all the time :)
nnoremap k kzz
nnoremap j jzz
nnoremap p pzz
nnoremap P Pzz
nnoremap G Gzz
nnoremap x xzz
inoremap <ESC> <ESC>zz
nnoremap <ENTER> <ENTER>zz
inoremap <ENTER> <ENTER><ESC>zzi
nnoremap o o<ESC>zza
nnoremap O O<ESC>zza
nnoremap a a<ESC>zza

カーソルが画面の中央に留まり、画面が上下に移動するようにします。


このソリューションは、OPに必要なものよりも多いと思います。私はそれを適用し、それは魅力のように機能します。
Gustavo Pinsard 2017

9
「scrolloff」を「lines」の半分の値に設定するだけではどうですか。
rld。

残念ながら "nnoremap o o <ESC> zza"は自動インデントを失いますが、これは一時的な文字 '。'を追加および削除することで回避できます。「nnoremap o o。<ESC> zzxa」
Neil McGill

@rldに感謝します。「スクロールオフ」も優れた、またはおそらくより良いソリューションです。ありがとう!ここで参照があります:vim.wikia.com/wiki/...
ヘンリー

14

あなたが使用するときに同じ列にカーソルを残すためにCtrl+ DCtrl+ FCtrl+ BCtrl+ UGHMLgg

次のオプションを定義する必要があります。

:set nostartofline

2
毎回忘れる/混乱させる:zt / zz / zb-​​カーソルを固定して画面をt op / center(german: ' z entrum')/ b ottom <---> H / M / L-固定画面に移動するカーソルH IGH / M iddle / L位置OW
イーライ

8

Scrolloffカーソルをページの中央に保つオプションを誰も使用していないことに驚いています。試してみてください:

:set so=999

これはVim wikiで最初に推奨される方法であり、うまく機能します。


3
あなたはカーソルが常にあることをしたくない場合は右の真ん中に、あなたは小さな値に設定することができます。たとえば:set scrolloff=4、カーソルは常にウィンドウの上部または下部から少なくとも4行離れている必要があるため、常に少なくとも少しのコンテキストがあります。
Soren Bjornstad

6

私は過去にこれらのショートカットを使用しました(注: 個別のキーストローク、つまりzをタップし、放して、次のキーをタップします):

z enter ->現在の行を画面の上部に移動します

z . ->現在の行を画面の中央に移動します

z - ->現在の行を下に移動します

それが明らかでない場合:

enterReturnまたはEnterキーを意味します。

.DOTまたは「完全停止」キー(.)を意味します。

-ハイフンキー(-)を意味します

価値があるのz.ZZ、Caps-Lockがオンになっている場合に誤って入力してViを保存して閉じる危険を回避することです。


5

カーソル移動コマンドの前に番号を付けると、そのコマンドが何度も繰り返されます

10Ctrl+ Eは1回ではなくCtrl+ E10回行います。


4

zEnter この質問が要求することを正確に行います。

奇妙に機能しzzない場所で機能します(特別な.vimrcがないUbuntu 2016.04 LTSのvim 7.4.1689)



2

キーを使用してテキストをスクロールすると便利な場合がKありJます。そのため、.vimrcにこの「スクロールモード」関数を用意しています(これもにバインドされていますzs)。

scroll_mode.vimを参照してください。


2

スクロールのニーモニック...

他の回答に追加することも、zezsに注意してください。つまり、画面をカーソルの左/右に移動します(カーソルを移動せずに)

+-------------------------------+
^                               |
|c-e (keep cursor)              |
|H(igh)             zt (top)    |
|                   ^           |
|           ze      |      zs   |
|M(iddle)  zh/zH <--zz--> zl/zL |
|                   |           |
|                   v           |
|L(ow)              zb (bottom) |
|c-y (keep cursor)              |
v                               |
+-------------------------------+

また、キーボード上のand hおよびland tおよびband(qwertzキーボードを使用)c-eおよびc-y(「y」は何とか下を指します)の位置も確認して、画面がどこに移動しているかを覚えます。


1

私が書いたプラグインのカーソル位置を移動せずにファイルを移動するために私を可能にします。それはあなたのポジションとターゲットポジションの間のラインを折りたたみ、それからそのフォールドを飛び越えるか、それを中止して全く動かないことに基づいています。

また、最初の行のカーソル、最後の行、中央のカーソルをすばやくクリックするだけでjkまたはlプラグインのモードで簡単にクリックできます。

ここにはぴったりだと思います。


1

vimを入力して次のように入力します。

:help z

zは、再描画用のvimコマンドなので、カーソルを置いた位置を基準にしてファイルを再描画します。次のオプションがあります。

z+- ウィンドウの上部にカーソルを置き、行の最初の非空白文字でファイルを再描画します。

z-- ウィンドウの下部にカーソルを置き、行の最初の非空白文字でファイルを再描画します。

z.- ウィンドウの中央にカーソルを置き、行の最初の非空白文字でファイルを再描画します。

zt- ウィンドウの上部にカーソルを置いてファイルを再描画します。

zb- ウィンドウの下部にカーソルを置いてファイルを再描画します。

zz- ウィンドウの中央にカーソルを置いてファイルを再描画します。

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