簡體   English   中英

如何在Vim命令中轉義%和#字符?

[英]How can I escape the % and # characters in a Vim command?

我正在使用Ack( https://github.com/mileszs/ack.vim )和--literal標志來搜索Vim中的項目。 我注意到每當我搜索帶有%#字符的字符串時,搜索都不符合我期望的內容。 我做了一些研究,發現這是因為Vim會在命令中擴展這些字符( %是當前文件, #是其他東西,不知道是什么)。

考慮到這些符號經常在代碼中出現,這在執行搜索時非常煩人。 有沒有辦法逃脫它們,最好是自動逃脫,以便搜索按預期工作? 我當前的映射是: nnoremap <leader>al :Ack --literal<space>

假設我在某個CSS文件中有一個選擇器#body ,我想找到它。 這些是我嘗試過的(沒有用過):

:Ack --literal #body
:Ack --literal \#body
:Ack --literal "#body"
:Ack --literal "\#body"

任何逃避的想法都不會像往常那樣起作用,或者甚至是搜索什么? 我沒有這些例子匹配任何東西

我已經通過雙重逃避角色來實現它。 例如, :Ack --literal "\\\\#body"將在結果窗口的狀態行中顯示:ack -H --nocolor --nogroup --column --literal "#body"並顯示預期結果。 引號似乎也是必需的。

你只需要用反斜杠作為前綴

:!echo %

輸出當前緩沖區的文件名

:!echo \%

打印一個單獨的'%'字符

顯然你必須像ack.vim問題中提到的那樣多次逃脫:

:Ack \\\#foo

這是ack.vim中的一個錯誤,當你這么做時,甚至不會調用ack程序:Ack --literal \\#body

但是,我用過

`strace -f -o-e trace=process gvim | tee /tmp/log`

它似乎在做:Ack --literal '\\#body' (介意額外的引號) 確實按預期工作:

[pid  3833] execve("/usr/bin/ack", ["ack", "-H", "--nocolor", "--nogroup", "--literal", "#body"], [/* 25 vars */] <unfinished ...>

我還沒有真正測試過它......

我對@ sehe的答案有一個補充:當你這樣做時!...或者system('...') vim本身不處理...但是調用shell,就像這樣: {shell} {shellcmdflag} {shellxquote}...{shellxquote} 對於ack調用,這將類似於["/bin/bash", "-c", "ack -H --nocolor --nogroup --literal #body"] ,因此bash將忽略--literal之后的所有內容,因為#是評論字符。 對於'#body'它不會這樣做,因為在引用的字符串中沒有可能的注釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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