让我们来看看。我gvim
正在跑步,我想打开一个文件,遵守autocmd
s(排除--remote-tab
)。
现在我知道我可以做(基本上是通过一些调整):
gvim --remote-send ":tabe my_file<CR>"
哪个有效。但是,如果文件中包含空格或奇怪的字符,则必须执行以下操作:
gvim --remote-send ":tabe my\\ file<CR>"
(双重\\
是因为其中一个被外壳吃掉了;这等效于手动键入
`:tabe my\ file`
在vim
它的作品)。现在,我可以找到一种在shell或其他东西中创建该字符串的方法,但是我希望可以在“:tabe”命令中对该字符串进行“全局引用”,例如
gvim --remote-send ":tabe 'my file'<CR>"
要么
gvim --remote-send ":tabe \"my file\"<CR>"
---等同于直接在vim命令行中编写:tabe "my file"
;似乎没有用。我可以用Shell显式引用字符串中的所有空格,例如
# <ESC> because the gvim instance can be in a mode different from normal
# the double CR: do not ask.
# the argument MUST be a full path
file="$(readlink -f "$@")"
fileq="$(echo "$file" | awk '{gsub(/ /,"\\\ ")}1')" # quote spaces FIXME add other chars
exec gvim 2>/dev/null --servername $desktop --remote-send "<ESC>:tabe $fileq <CR><CR>"
但它仅适用于空格,不适用于制表符和的其他特殊字符"
(也不包含换行符,但如果文件名中包含换行符,则应使用!)。
问题:
独立于特定的shell(我将在:-)之后进行处理)时,是否可以直接在vim tabe:
行中键入全局引用文件名而不用一个一个地引用“奇怪”字符?
嗯...
—
Rmano 2015年
gvim --remote-send ":tabe 'f s.txt'<CR>"
对我没有用,也没有:tabe 'f s.txt'
用vim 编写,我明白了E77: Too many files names
。
会不会
—
muru
gvim --servername $desktop --remote-send "<ESC>:tabe ${file// /\\ }<CR>"
更简单?
该
—
EvergreenTree
shellescape
功能有用吗?
请记住,
—
tommcdo
:edit
(及其变体)不接受带引号的文件名。所有特殊字符都需要单独转义。所以,:edit "foo bar.txt"
行不通;你需要:edit foo\ bar.txt
。就是说,类似的事情:execute 'tabedit' escape('$file', ' ')
可能在正确的轨道上。
gvim --remote-send ':tabe foo\ bar.txt<CR>'
在bash和zsh上为我工作。而且报价似乎也很重要。如果我在"
内部使用,它不会起作用,但会起作用'
:gvim --remote-send ":tabe 'foo bar.txt'<CR>"