我一直在使用 cscope/ctags 資料庫。但是一段時間后,我注意到我的cscope.files中存盤我的 find 命令結果的一些檔案被分成兩行或更多行。這會導致它們在索引時被 cscope/ctags 忽略。
目前我在別名中使用它:
alias prp_indx='
rm cscope.in.out cscope.out cscope.files tags
find . -name '\''*.[chS]'\'' >> cscope.files
find . -name '\''*.cpp'\'' >> cscope.files
find . -name '\''*.hpp'\'' >> cscope.files
find . -name '\''*.cxx'\'' >> cscope.files
find . -name '\''*.hxx'\'' >> cscope.files
cscope -b -q -k; ctags -R
'
請幫助我使用適當的命令,我可以在別名/函式中使用該命令來實作帶雙引號的檔案名,而不會在多行中破壞路徑。
uj5u.com熱心網友回復:
我沒有理由find將檔案名拆分為多行,除非名稱本身包含換行符。
如果您有這樣的檔案名,最好重命名這些檔案,因為我認為它們cscope并不真正支持包含換行符的檔案名。至少,我認為沒有辦法在檔案中列出此類cscope.files檔案,即使是參考或任何型別的轉義(但如果您知道該怎么做,請告訴我們,以便我們可以相應地調整以下內容) )。因此,您能做的最好的事情就是讓cscope搜索 ( -R) 而不是提供cscope.files檔案。如果您這樣做cscope確實會找到并分析這些檔案,但是,當與cscope您進行互動時,您會發現它會混淆并無論如何都會拆分名稱......
如果你沒有這樣不尋常的檔案名,但你的cscope.files檔案中有不需要的換行符,那么肯定有其他東西篡改了它。
無論如何,更喜歡一個功能。與函式相比,別名主要有缺點。有一個bash功能:
prp_indx () {
rm cscope.in.out cscope.out cscope.files tags
find . -name '*.[chS]' -o -name '*.[ch]pp' -o -name '*.[ch]xx' > cscope.files
cscope -b -q -k
ctags -R "$@"
}
注意:如果您可以擁有名稱與 3 個模式之一匹配的目錄,請添加一個-type測驗以排除目錄:
find . ! -type d \( -name '*.[chS]' -o -name '*.[ch]pp' -o -name '*.[ch]xx' \) > cscope.files
如果您有包含空格、雙引號和/或反斜杠的不尋常檔案名,您可以添加后處理,例如sed:
sed -i 's/["\]/\\&/g;s/^\|$/"/g' cscope.files
這將在任何雙引號或反斜杠之前添加一個反斜杠,并在所有檔案名前加上雙引號。將此sed命令添加到函式定義中,在find命令之后。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/396589.html
上一篇:使用jq回圈遍歷json物件
