Как вы «разбиваете» строку в Vim?


32

Предположим, вы запустили следующий фрагмент vimscript:

let @z = system("date")

Это поместит строковую версию текущей даты в регистр z, но строка будет заканчиваться символом новой строки, который мне не нужен. Есть ли встроенный способ (похожий на Perl chomp), чтобы избавиться от завершающих строк строки?

Ответы:


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:stringк substitute?
Bdesham

2
@bdesham Потому Chomp()что передает все аргументы, которые он получает, удаляет завершающий символ system()новой строки из его вывода и возвращает его.
Jamessan

Правильно. system()имеет необязательный {input}аргумент, и это обрабатывает любой из них в общем. Если вам это не нужно, просто сделайте это обычным способом.
Инго Каркат

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

удаляет новую строку для вас.


Я думаю, что это, вероятно, подход, который я на самом деле буду использовать, но я принял другой ответ, потому что он более применим. (Например, он удалит завершающие новые строки из многострочной строки, оставив другие
новые

5
Обратите внимание, что это не будет работать правильно для систем, которые используют что-то другое, чем \nдля новой строки. systemlist()только удаляет \n, а не любой \r.
jamessan

4

Кристиан Брабандт перечислил несколько различных методов на superuser.com.

Мне нравится этот, потому что он короткий:

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

Интересно, как он обрабатывает \r\nтипы окончаний строк ...
x-yuri

@ x-yuri Это, безусловно, стоит проверить. Не цитируйте меня об этом, но я думаю, что Vim-on-Windows нормализует эти строки до того, \nкак их вернуть.
Joeytwiddle
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.