テキスト内の非常に長い行(500文字以上)を処理するにはどうすればよいですか?


19

一部のテキスト形式では、改行が重要です。

たとえば、私はしばしばVimを使用してMediaWikiドキュメントを記述しますが、そこではどこにも改行を入れることができません(Markdownとは異なります)。だから私はたくさんの文字で行を書くことを余儀なくされています。

これは、長い行(200文字以上)または非常に長い行(1000文字以上)につながる可能性があります。Vimでこれを使用するのは非常に厄介です。一例として、1000文字行の途中で何かを編集する場合、カーソルを500回移動する必要があります。

これはwまたは/で少し速くすることができますが、それでも厄介です。

これに対処するより良い方法はありますか?より良い移動キー?ある種の「偽のラッピング」(テキストはあたかもファイルのように振る舞うtw=80\n、ファイル内ではない)、または何か他のもの?


1
また、画面の最後に空白の@行が表示されないように、display = lastline設定することもできます。
Random832

回答:


21

g一連のコマンドを使用して、表示可能な画面領域の境界に移動できます。たとえばg$、画面の右端(必ずしも行の終わりではない)に移動します。 画面に表示されるgjカーソルを1行下に移動します(必ずしも論理的な1行下にあるとは限りません)。

おそらく、矢印キーを再バインドできます。

nnoremap <Up> gk
nnoremap <Down> gj

または、一部の人々はまた直接再バインドkjます:

nnoremap k gk
nnoremap j gj

挿入モードでは、次を使用できます。

inoremap <C-k> <C-o>gk
inoremap <C-j> <C-o>gj

または:

inoremap <Up> <C-o>gk
inoremap <Down> <C-o>gj

さらに、を使用すると:set wrap、Vimは行を折り返すため、すべての行を表示できます。を使用set showsbreak=++て、Vimがラッピングを実行していることを示すこともできます。


特定の列位置にジャンプするには、|コマンドを使用できます。たとえば、200|列位置200に移動します。


1
...そしてg5jいつものように5つ下にジャンプします。
よ」

1
@yo 'あなたが意味すると思う5gj
マーティントゥルノイ

1
@Carpetsmoker Strange; ほとんどのコマンドでは、コマンド自体が最後である限り、プレフィックスと番号の順序は関係ありません。ここではありません:-/
yo

「@yo、よく、でg5jg5すぐ隣にジャンプした、最初に見ている5あなたが適用する前にj。それが、何をすることができないのか5gjです。
シャーバズ

3

Vimはソフトラッピングをサポートしset wrapています。これを有効にすると、可視画面を超えて長い行が折り返されます。gjgkを使用して、このような折り返された行の上をそれぞれ上下に移動できます。


2

非常に長い行を扱う場合、最大の問題は行の長さの違いに関係しています。つまり、行の端近くで上下に移動すると、ウィンドウが非常に左または右にスクロールします。

これはvirtualedit=all、を設定することで回避できます。これにより、行末の長いスペースにカーソルを移動できます。


1

他の人が言ったように、g何かを使って動き回ることができます。ただし、極端に長い行がある場合、gj複数回押して下に移動することは人間工学的ではありません。私は.vimrcそれをもっと簡単にするために次のものを持っています:

vmap <D-j> gj
vmap <D-k> gk
vmap <D-4> g$
vmap <D-6> g^
vmap <D-0> g^
nmap <D-j> gj
nmap <D-k> gk
nmap <D-4> g$
nmap <D-6> g^
nmap <D-0> g^

Macでは、コマンドキーを押したままにすることで、表示行でj、k、$、0、^を使用できます。その他のシステムでは、代わりにDあなたは試みることができるMか、AAltキーのために、またはCコントロールのために。

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