水平スクロールを無効にする方法は?


37

バッファーに隠された文字がいくつかあり、水平方向のスクロールによりアライメントが大幅に停止します。

それを無効にする方法はありますか?関連するオプションが見つかりませんでした。

悪い水平スクロールデモ

編集:デモを追加しました。vimはファイルの隠されていない部分のスクロールオフセットに基づいているため、アラインメントが壊れています。


6
あなたはそれを無効にすることはできませんが、できる:set wrap
EvergreenTree

8
@Enuy、つまり、行は実際にはウィンドウの幅より長いが、一部のテキスト(bashのようなカラーコード)は隠されているということです。そのため、Vimは既にウィンドウの端に到達したと考えていますが、視覚的には到達していません。これはバグとみなされると思います。
tommcdo

8
@tommcdoはい、あなたの言うことを理解しています。行の最後の隠された部分のみが折り返しの原因であり、BramからWONTFIXを取得した場合、行の折り返しに似た問題があります:code.google.com/p/vim/issues/detail
id=

3
それが、水平スクロールを完全に無効にする代替ソリューションを探している理由です。
エヌイ

3
私が考えることができる最も近いものは、あなたが端末にいる場合<c-s>、画面が更新されないように端末をサスペンドするために使用することができるということです。その後、盲目的に変更を加えて、行の先頭に戻り、ヒット<c-q>して再開できます。おそらく役に立たないその他のオプション:すべての表示文字の間に同じ数の隠された文字があることを確認するか、ウィンドウを広げます。
マットベーム

回答:


2

水平スクロールを無効にする方法

水平スクロールを無効にするソリューションを作成しました(@ЯрославРахматуллинの提案をリフティングすることにより

augroup NoScrollPlease
  autocmd!
  autocmd CursorMoved * norm!99zH
augroup END

これにより、再びスクロールするという非常に正確な方法により、右へのスクロールが防止されます。*

*右にスクロールした距離や行の長さがわからないため、任意の「遠い」量の半画面幅99をスクロールしています。また、左に「戻る」前にスクロールする前に、実際に右にスクロールしたかどうかを確認する必要はありません。実際にこのソリューションを使用する場合はgetcurpos()'sidescroll'との値を比較して、何かをノックアップすることができます'columns'

なぜそうしたくないのか

これを使用しない理由は、スクロールの問題の根底にある別の問題であるためです。Vimではカーソルを「画面外」に移動することはできません。したがって、スクロール後にカーソルが画面外になるように左にスクロールすると、Vimはカーソルを一緒に持ってきて、左に移動します。

ただし、カーソルが画面上にあるかどうかに使用する計算は、元の問題でスクロールするかどうかを決定するために使用する計算と同じであるため、最終的な効果は、この「解決策」を使用して移動しようとすると通常横スクロールを引き起こす状況でカーソルを右に移動しますが、カーソルはまったく移動を拒否します。**

**現在の位置と動きに応じて、わずかに正確にするために、カーソルは右に移動する場合があります。スクロールが通常発生する位置を超えて移動することはありません。

別のオプション?

したがって、計画されている回避策がうまく機能しないのではないかと心配しています。必要に応じて実行可能な一般的な問題の解決策を、Vimのソースコードで実装する必要があるだろう。

すでに述べてきた私はあなたのgifに示した問題の特定のインスタンスへの回避策のための最善の策は、使用を中止し、プラグインの作者に請願することです怖いので、これは、いつでもすぐに到着することはほとんどありませんconceal完全にし、代わりに非表示のテキストをバッファから完全に削除します。

unconcealed出力との言及に基づきvim-plugin-AnsiEscにおけるドキュメントこれがかもしれないそれらが実装することが可能だが、それがどのようにプラグイン機能の知識がなくても確かに言うのは難しいものになります。


0

ファイルを編集する方法がある場合、ここで説明するように、\[\]で色の設定をラップすることができます

[...]行われているのは、「[」および「]」で黄色を開始する「\ 033 [1; 33m」を囲むことです。非印刷文字です[...]

それ以外の場合、カラーコード全体が文字と見なされるため、水平スクロールが考慮される場合があります。

これが問題かどうかはわかりませんが、カレンダーのソース(とsyntax off)と現在の動作を見ると、それを考えさせられました。


問題は色ではなく、conceal機能によって隠された文字です(コメントの説明を参照)。
リッチ

はい、わかりました。たぶん私がよく把握していないものがあるかもしれませんが、色文字を使用するPS1でbashで同様の問題があり(色であるという事実は問題ではありません)、端末は良いところで新しい行に正しく戻っていませんでした色の文字を有効な文字として数えていましたが、それらは目に見えないため無視する必要がありました。アニメーションは、この問題を思い出しました(水平方向のページネーションは、行の文字数に基づいて行うように「すぐに」行われます。これは、私の回答のリンクに記載されています)。
パダウィン

2つの問題は似ています、私は同意します。しかし、この質問で説明されている動作は、Vimが(端末ではなく)文字をカウントする方法が原因で発生するため、最初の段落で行った提案は役に立たないのではないかと心配しています。
リッチ

0

編集:これは既知のバグで、「修正しない」というクローズドです:https : //github.com/vim/vim/issues/260

元の回答:

カーソルが画面の端に当たるまで、vimは水平にスクロールしません。

使用していsidescrolloffますか?

水平スクロールを完全に無効にすることについては知りませんが、この設定では、カーソルが端から外れるまで待つ必要があります。

:set sidescrolloff=0

'sidescrolloff=0'Vimはカーソル端から外れいると考えているため、問題が存在します:可視テキストではなく、非表示のテキストに基づいて計算を行います。
リッチ

ああ、それは本当にバグだ。これに関するバグレポートを見つけて、回答に追加しました。vimのメンテナーはそれを修正したくありません。
ジェイソンウーフ

このバグの修正ではありません...しかし、多分あなたはバッファ内のプレーンテキストと色/などのprop_type_add()とprop_add()でカレンダーの色付けを実装することができます。
ジェイソンウーフ

うん、それは残念ですが、そのバグレポートがOPが回避策を探してこの質問を書いた理由です!
リッチ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.