[英]How to extract line numbers from a multi-line string in Vim?
在我看來,Vimscript 沒有很多操作字符串的功能。 我經常使用matchstr()
、 substitute()
和較少使用的strpart()
。 也許不止於此。
例如,刪除以下字符串a
中行號之間的所有文本的最佳方法是什么?
let a = "\%8l............\|\%11l..........\|\%17l.........\|\%20l...." " etc.
我只想保留數字並將它們放入列表中:
['8', '11', '17', '20'] " etc.
(請注意,行號之間的文本可能不同。)
你正在尋找 split()
echo split(a, '[^0-9]\+')
編輯:
鑒於新的約束:只有來自\%d\+l
的數字,我會這樣做:
echo map(split(a, '|'), "matchstr(v:val, '^%\\zs\\d\\+\\zel')")
注意:您的 vim 變量格式不正確,要僅使用一個反斜杠,您需要在字符串中加上單引號。 使用雙引號,在這里你需要兩個反斜杠。 所以,與
let b = '\%8l............\|\%11l..........\|\%17l.........\|\%20l....'
它成為了
echo map(split(b, '\\|'), "matchstr(v:val, '^\\\\%\\zs\\d\\+\\zel')")
可以利用具有表達式功能的替換(請參閱:help sub-replace-\=
)遍歷所有目標匹配項,將它們附加到列表中。
:let l=[] | call substitute(a, '\\%\(\d\+\)l', '\=add(l,submatch(1))[1:0]', 'g')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.