我试图删除一个名为 ^V^V 的文件(通过在 Vim 中闲逛创建),但失败了,因为我不知道如何转义插入符号。因此,我复制并粘贴了它,并使用了垃圾桶命令(MacOS 的 cli 实用程序),它删除了所有可见文件。我注意到是因为 Alacritty 终端警告我配置文件消失了。
这是我输入的命令:
trash ^V^V
^V^V 表示脱字符号和大写 v,而不是 Ctrl V。
您可以在此处获取 Cli 实用程序(如果您使用 MacOS,建议使用): https://github.ink/sindresorhus/macos-trash
结果是当前目录下的所有文件都被发送到垃圾箱了。
根据手册页
zshexpn
,在文件名生成的上下文中,如果设置了扩展通配符,则^
具有特殊含义:
^x
(需要设置 EXTENDED_GLOB。)匹配除模式 x 之外的任何内容。它的优先级高于“/”,因此“^foo/bar”将搜索“.”中的目录。除了名为“bar”的文件的“./foo”之外。
假设您已经扩展了 glob 集,
^V^V
(即四字节序列,而不是转义码的两倍)扩展到不以大写“V”开头的所有内容。示例会话:
╓╴ z[10:21]╶╖
╙╴~/scratch/zsh❯ ls 07:31 17:40 ╜
B_file.txt F_file.txt V_file.txt
╓╴ z[10:21]╶╖
╙╴~/scratch/zsh❯ ls ^V^V 07:31 17:40╜
B_file.txt F_file.txt
首先要注意的是:Vim 是 Vim,不是 Vi。他们有很多共同点,但也有更多不同点。如果您绝对想从书本中学习,请选择 一本关于 Vim 的书,而不是 一本关于 Vi 的书。
你的问题除了用错书之外,还在于你没有仔细阅读。^V
不是
^
字符后跟
V
字符,它是
CTRL+V
的字面表示。在给定的示例中,您被告知......
:
输入命令行:
:
map q :wq
:
:map q :wq
^V
(
CTRL+V
) 两次(也许是 Vi 的事情,你只需要在 Vim 中执行一次),
Carriage Return
即可插入其文字值 (
^M
):
:map q :wq^M
Carriage Return
即可执行您刚刚键入的命令。
map q :wq^M
其中 ^M
是文字
CTRL+M
字符,而不是:
map q :wq^V^VCR CR
其中^
是
^
,
V
是
V
,等等。难怪你的映射正在做各种疯狂的事情,因为它纯粹是胡言乱语。至于为什么由损坏的映射创建的文件会出现这样的行为?如果你做类似的事情:
$ rm '^V^VCR CR'
或:
$ rm \^V\^VCR\ CR
然后文件按预期删除,但从你混乱的问题中不清楚你实际上做了什么。
一些建议:
ZZ
。