簡體   English   中英

如何從shell命令中消除vim命令的歧義

[英]How to disambiguate vim commands from shell commands

如何輕松逃脫命令行過濾器開始

實際上,這有點像XY問題。 不過,我將不得不在另一個問題中發布原始問題,因為Y問題確實很有趣,我想知道。 我將在評論中發布指向X問題的鏈接。

這是“ X”問題。

我以為通過弄清楚如何逃避%可以解決問題,但是事實證明Vim的行為比我想像的要深。 顯然,Vim對於|具有特殊含義。 用自己的腳本語言編寫,使事情復雜化:

:nmap L :r !ls | awk '{printf "\"\%s\"\n", $0}'<CR>

預期結果

按下Lls的輸出填充緩沖區,並用引號引起來。

實際結果

E492: Not an editor command:  awk '{printf "\"\%s\"\n", $0}')<CR>

Vim似乎是通過awk來思考的,我的意思是vim命令,而不是shell命令。 我該如何消除歧義? 我嘗試了許多組合,包括用子外殼包圍過濾器,並放置! 在awk前面也是,但是...

子殼:

:nmap L :r !(ls | awk '{printf "\"\%s\"\n", $0}')<CR>
E492: Not an editor command:  awk '{printf "\"\%s\"\n", $0}')<CR>

Subshel​​l + !awk

:nmap L :r !(ls | !awk '{printf "\"\%s\"\n", $0}')<CR>
[No write since last change]
/bin/bash: -c: line 0: syntax error near unexpected token `)'
/bin/bash: -c: line 0: `awk '{printf "\"%s\"\n", $0}')<CR>'    
shell returned 1    
Press ENTER or type command to continue
L
:r !(ls

!awk沒有子shell:

:nmap L :r !ls | !awk '{printf "\"\%s\"\n", $0}'<CR>
[No write since last change]
/bin/bash: -c: line 0: syntax error near unexpected token `newline'
/bin/bash: -c: line 0: `awk '{printf "\"%s\"\n", $0}'<CR>'
shell returned 1
Press ENTER or type command to continue
L
:r !ls

我無語了。

瑞安(Ryan)有幫助地指出,我並沒有嘗試過逃脫管道。 我完全不知道的一件事:

:nmap L :r !ls \| awk '{printf "\"\%s\"\n", $0}'<CR>
               ^

有效。

現在,如果我們能解決那個Y問題 ,我將是一個快樂的露營者。

暫無
暫無

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

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