vimの最後の行の終わりまで自然にスクロール

vimの最後の行の終わりまで自然にスクロール

私はvim初心者であり、この問題を解決するのに役立つリソースを見つけるのに苦労しています。

カーソルをファイルの一番下に移動するときは、最後の行を過ぎて続行したいと思います。最後の行がウィンドウの一番上に来るまで続けるのは良いですが、無期限にしても大丈夫です。現在私の解決策は、set scrolloff=20myと入力して~/.vimrc+Gを押してzz一番下に移動することです。しかし、上下にスクロールすると、最後の行が再び下部に貼り付けられます。

ファイルの後に改行文字がないため、実際にスクロールできる項目がないことを理解しています。しかし、それにもかかわらず、ウィンドウの中央にある一番下の行を使用してファイルを編集することができず、迷惑です。

だから最終的に私は最終結果に達したときにそれを押すとj下にスクロールすることを願っています。これを行う方法はありますか?

答え1

この動作には組み込みのオプションはないと思いますが、構成の一部のキーバインディングを使用すると、カーソルが途中の行を永久に保持できます(ファイルの最初の数行を除く)。

set scrolloff=99999

nnoremap <C-U> 11kzz
nnoremap <C-D> 11jzz
nnoremap j jzz
nnoremap k kzz
nnoremap # #zz
nnoremap * *zz
nnoremap n nzz
nnoremap N Nzz
nnoremap gg ggzz
nnoremap G Gzz
nnoremap gj gjzz
nnoremap gk gkzz

zzこれは、現在の行の後に実行する一般的な操作をマップし、画面の中央に配置します。画面の位置が再び中央になる前に実際に後方に移動するため、遅い端末(SSH経由など)ではちらつきが発生する可能性があります。

答え2

現在のカーソル行を画面上の特定の位置に移動することもできます。

<Ctrl-E>現在の行を1行上に移動するために使用します。

zt現在の行をページの上部に移動することもできます。

追加情報ここ

答え3

このスクリプトが見つかりましたhttps://www.vim.org/scripts/script.php?script_id=1649実際、これは以前の答えよりもうまく機能します。テキストを挿入すると、スクロールがジャンプしているように見えます。

ここでミラー:https://github.com/vim-scripts/scrollfix

答え4

で条件付き再マッピングを使用できますj。文書の最後の行にある場合jはにマップされます。<C-e>別の行マップjにある場合j

nnoremap <expr> j line(".") == line('$') ? '<C-e>':'j'

line(".") は現在の行番号を返し、line("$") は最後の行番号を返します。

関連情報