Vimで文字列をどのように「チョップ」しますか?


32

次のvimscriptを実行するとします。

let @z = system("date")

これにより、現在の日付の文字列バージョンがzレジスタに格納されますが、文字列は不要な改行で終了します。chomp文字列の末尾の改行を取り除くための組み込みの方法(Perlに似ています)はありますか?

回答:


24

を使用するsubstitute()か、関数を定義できます。

function! Chomp(string)
    return substitute(a:string, '\n\+$', '', '')
endfunction

この亜種はsystemあなたのために呼び出して、結果をむちゃにします:

function! ChompedSystem( ... )
    return substitute(call('system', a:000), '\n\+$', '', '')
endfunction

(この関数は、私のingo-libraryプラグインでもとして利用できますingo#system#Chomped。)


これは機能しcallますが、なぜ奇妙な構文ですか?というChomp名前のパラメーターを指定してstring、次に渡すだけでa:stringsubstituteどうですか?
bdesham

2
@bdesham Chomp()は、取得した引数をすべて渡すためsystem()、出力から末尾の改行を取り除き、それを返します。
ジェームスサン

右。system()オプションの{input}引数があり、これはこれらのすべてを一般的に処理します。これが必要ない場合は、従来の方法で行ってください。
インゴカルカット

25
let @z = systemlist('date')[0]

改行を削除します。


これはおそらく実際に使用するアプローチだと思いますが、より一般的に適用できるため、他の回答も受け入れました。(たとえば、複数行の文字列から末尾の改行を削除し、他の改行はそのままにします。)
bdesham

5
これは\n、改行以外のものを使用するシステムでは正しく機能しないことに注意してください。 systemlist()のみを削除し\nます\r
ジェームスサン

4

クリスチャンブラバンドは、superuser.com にさまざまな方法をリストアップしています。

これは短いので気に入っています。

let @z = system("date")[:-2]

私はそれがどのように処理するか疑問に思う\r\n...行末の種類を
X-ゆり

確かにチェックDOは、この上で私を引用していないが、私は価値がある@ X-ゆりだと思うのVimオンWindowsがにそれらの行末を正常化します\nそれらを返す前に。
-joeytwiddle
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.