私はvim初心者であり、この問題を解決するのに役立つリソースを見つけるのに苦労しています。
カーソルをファイルの一番下に移動するときは、最後の行を過ぎて続行したいと思います。最後の行がウィンドウの一番上に来るまで続けるのは良いですが、無期限にしても大丈夫です。現在私の解決策は、set scrolloff=20
myと入力して~/.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
答え3
このスクリプトが見つかりましたhttps://www.vim.org/scripts/script.php?script_id=1649実際、これは以前の答えよりもうまく機能します。テキストを挿入すると、スクロールがジャンプしているように見えます。
答え4
で条件付き再マッピングを使用できますj
。文書の最後の行にある場合j
はにマップされます。<C-e>
別の行マップj
にある場合j
。
nnoremap <expr> j line(".") == line('$') ? '<C-e>':'j'
line(".") は現在の行番号を返し、line("$") は最後の行番号を返します。