ラインを効率的に複数のラインに分割する方法は?


11

各値がスペースで区切られた1行だけのテキストファイルでログデータを受信して​​います。1行を複数行に分割するコマンドまたはコマンドセットはありますか?

回答:


21

コマンドを使用して、行の連続するスペースを改行で単純に置き換えることができます:s/\s\+/\r/g\s\+1つ以上の空白文字を意味し\r、改行です。詳細については:help :substitute、および:help regexpを参照してください。次のような行でコマンドを実行すると、

foo bar baz

あなたが得る:

foo
bar
baz

あなたがいる場合にhlsearch有効で、あなたはどこにでも強調された空間で、あなたの画面を乱雑にしたくない、あなたはそれを避けるために、次のような小さな関数を書くことができます。

function! SplitLineNicely()
    " Save previous value of last search register
    let saved_last_search_pattern = @/

    " :substitute replaces the content of the search register with the `\s\+` 
    " pattern highlighting all whitespaces in the file
    substitute /\s\+/\r/g

    " Restore previous search register
    let @/ = saved_last_search_pattern
endfunction

「どこでもハイライトされたスペースで画面を乱雑にしたくない場合」これは、OPの設定について多すぎると想定しています。
romainl 2015

@romainlベター?
toro2k

1
はい、それはより良いIMOです。
romainl 2015

2
です\r、見てください:help s/\r。これは、文字通りの改行タイピングに置き換えることができます<c-v><cr>。このコンテキストで\nはnull文字:help s/\nです。を参照してください。
toro2k 2015

1
replaces the content of the register-どの登録?
stillanoob

5

vimの置換を使用することは、おそらくタスクを実行するためのより良い方法の1つですが、マクロを使用することもできます。次のデータがあり、カーソルが行1のどこかにあるとします。

1 a b c d e f
~

通常モードでqq開始すると、を押すと、を介して呼び出し可能なマクロの記録が開始され@qます。その後qqに入力されたものは、前述の呼び出しを介して繰り返し可能になります。私たちの目標は、シームレスな繰り返しを可能にするのに十分一般的な通常のコマンドを記録することです。

したがって、入力0してカーソルを行の先頭fspaceに移動し、次にカーソルを最初のスペースに移動できます。これにより、と入力してrenter、次の結果を得ることができます。

1 a
2 b c d e f
~

q私たちの再利用可能なマクロは繰り返し準備ができているので、今すぐ打つことは良い考えです。多少恣意的に、改行で置き換えるスペースが4つ残っていることに注意してください。したがって4@q、を押すと、qマクロが4回繰り返され、結果は次のようになります。

1 a
2 b
3 c
4 d
5 e
6 f
~

注方法で、我々はマクロを設定しているため、現在の行だけに影響を与えるとして、9000回以上のコマンドを繰り返し実行しても安全であったであろう、と最後のデータエントリの右側にはスペースがなかったことから、ということfspaceでしょう「うまく」失敗し、データが改行で置き換えられなくなります。

したがって、最初から繰り返すには:

qq0fspacerenterq9001@q

私たちの結果を提供します。


1
9001ユーザー名をすばやく入力するためのキーがキーボードにあるのが大好きです。
リッチ

4

Vimで行を分割する最も簡単な方法は、通常モードのコマンドですgq(通常モードまたはビジュアルモードで両方の文字をすばやく連続して入力します)。

ビジュアルモードでは、選択されているものはすべて分割されますgq。通常モードでは、動きに追従します。

たとえば、gql1行を現在設定されている幅に分割します。分割線の幅を現在の設定とは異なるように設定するには、を使用できます:set textwidth=n。ここnで、は1行に含める文字数です。たとえば、終了10したら通常の幅に戻します。

この情報は、モーションを使用して通常モードでラインを結合および分割する方法を示す、KholidfuによるYoutube ビデオから入手しました。

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