我有幾行很長的文本,我基本上想在 80 個字符標記之前或之上的字邊界處硬換行(中斷)。但是,我還需要在每個新斷行的前面添加字符,如下所示:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque viverra euismod pulvinar. Fusce quis nibh commodo, commodo massa eu, ultricies nisi. Phasellus ac nulla odio.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque viverra
\ euismod pulvinar. Fusce quis nibh commodo, commodo massa eu, ultricies
\ nisi. Phasellus ac nulla odio.
我找到了很多打破長行的方法,但沒有一種我能夠修改以生成像上面那樣的輸出,而且我不能在事后簡單地添加它,因為這會再次將行擴展到 80 個字符以上.
任何人都可以推薦與 Vim 兼容的正則運算式或本機命令來進行上述格式化嗎?使用 sed 或 fmt 或其他外部工具的東西也受歡迎,但在這種情況下,我可以在 Vim 中使用的東西將是首選。
到目前為止我發現并嘗試過的:
- 正則運算式在打破行恰好在Vim的第一空間80個字符,或后 -非常接近,但我無法弄清楚如何添加一個條件在字邊界,打破之前或80個字符
- 原生 Vim 格式化命令、fmt、折疊等- 所有關于 80 個字符硬換行的好建議,但似乎無法修改以添加所需的字符
- notepadd 風格的正則運算式硬換行 80 個字符- 這可能適合我的需要,但無法弄清楚如何修改該正則運算式以與 Vim 兼容
- C# regex 基本上做同樣的事情,但同樣,我無法弄清楚如何修改以供 Vim 使用
我確定我遺漏了一些相當簡單的東西,但我一直堅持如何使用條件格式在 80 個字符之前的最后一個空格處中斷。任何建議將不勝感激。謝謝。
uj5u.com熱心網友回復:
你需要修改兩件事:
- 用 0 到 80 量詞替換恰好 80 量詞,
\{0,80}(或者\{0,78}你似乎想要 80-2=78 限制,因為這\t\\將是你想要插入的兩個額外字符) - 在末尾添加尾隨詞邊界,
\> - 添加
\t\\到替換模式以\在創建的行中插入 TAB 字符。
您可以使用
:%s/.\{0,78}\>/&\r\t\\/g
uj5u.com熱心網友回復:
一個詳細的awk命令也可以很好地完成這項作業:
awk -v n=76 '
{
len = 0
for (i=1; i<=NF; i) {
len = 1 length($i)
printf "%s", $i
if (len > n && i < NF) {
printf "%s\t\\ ", ORS
len = 6
}
else
printf "%s", OFS
}
print ""
}' file
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque viverra
\ euismod pulvinar. Fusce quis nibh commodo, commodo massa eu, ultricies
\ nisi. Phasellus ac nulla odio.
對于下面提供的第二個示例,我得到了這個輸出:
_Array1DToHistogram _ArrayAdd _ArrayBinarySearch _ArrayColDelete _ArrayColInsert
\ _ArrayCombinations _ArrayConcatenate _ArrayDelete _ArrayDisplay _ArrayExtract
\ _ArrayFindAll _ArrayInsert _ArrayMax _ArrayMaxIndex _ArrayMin _ArrayMinIndex
\ _ArrayPermute _ArrayPop _ArrayPush _ArrayReverse _ArraySearch _ArrayShuffle
每行的長度是:
80
80
79
79
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/361192.html
上一篇:翻譯PHP語言檔案
