gpt4 book ai didi

vim - 为什么需要在映射定义中转义栏 Ex 命令分隔符,而不是在 Vim 的命令行中转义?

转载 作者:行者123 更新时间:2023-12-04 16:29:44 28 4
gpt4 key购买 nike

我不明白为什么下面的命令做不同的事情。
粘贴在 .vimrc文件,这两个命令定义了通过按 t 触发的映射的两个版本。在正常模式下:

nnoremap t :call search('\m\(a\|b\)', 'W')<CR>
nnoremap t :call search('\m\(a\\|b\)', 'W')<CR>
将上述映射的效果与直接从命令行运行这些搜索调用的结果进行比较:
:call search('\m\(a\|b\)', 'W')
:call search('\m\(a\\|b\)', 'W')
具体来说,“预期”行为需要 \\|nnoremap例如,但它需要 \|call搜索示例。
我知道对竖线字符 ( :help :bar ) 的特殊处理是 Vim 为我设置的陷阱之一,但它仍然没有意义。文档清楚地表明“这个命令列表将把 bar 作为其参数的一部分”,但这些异常(exception)都不适用于此。
本示例中涉及的所有命令都将 bar 视为元连接字符。此外,在这种情况下,bar 位于字符串内,并且——我认为?——被解析为字符串的一部分优先于元连接语法。

最佳答案

确实,这个问题是由bar的特殊处理引起的
字符由映射创建命令。
Vim 中的键映射机制是一种制作键序列的方法
按下被解释为另一个按键序列;没有语义
Vimscript 语言的解释发生在这个级别。由于,在
为了创建映射,有必要将两者分开
要映射的键序列参数,:map 的命令-家庭
首先确定两个参数的边界。使用
在映射中可能会干扰此过程的字符数,一个
必须使用为这些字符提供的转义语法(其中
是回车符、空格、反斜杠和横杠字符)。
因为 bar 字符可以用来分隔映射命令
从下一个 Ex 命令,因此,定义结束边界
在映射的右侧,它不能按原样使用
一个关键序列。根据 :help map_bar ,取决于设置,
条形字符可以转义为 <bar> , \| , 或 ^V| (在哪里^V表示文字 Ctrl+V 键码)。
记住这一点,让我们按照有问题的映射(围绕\|/\\|部分)它们在默认情况下的解释方式
配置。在第一个映射中,\|序列被视为
单个|特点。因此,在该映射命令之后
执行,按 t将与键入相同:call search('\m\(a|b\)', 'W')进入
运行第二个映射命令时,\\|字符串是
解释为文字反斜杠字符(没有必要
逃脱\在映射的右侧,嵌套的除外)
其次是 \|表示条形字符的说明符。
因此,此命令映射 t到以下几点::call search('\m\(a\|b\)', 'W')进入
但是,当在命令行模式下键入映射的搜索调用时,
与映射中的键序列不同,它们被解释为 Ex 命令
马上。这些条形字符出现在字符串文字中,所以有
不可能将它们误解为 Ex 命令的分隔符。
直接输入时,命令将按原样发送执行
书面。因此,它们之间的差异是由于
正则表达式 \m\(a\|b\)\m\(a\\|b\) ,不是由于
任何逃避行为。

关于vim - 为什么需要在映射定义中转义栏 Ex 命令分隔符,而不是在 Vim 的命令行中转义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9695168/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com