簡體   English   中英

如何從 Vim 中的多行字符串中提取行號?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM