Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim 为什么可以';t grep显示找到的行是否包含^M(必须是unix新行)字符?_Vim_Terminal_Grep_Newline_Ansi Escape - Fatal编程技术网

Vim 为什么可以';t grep显示找到的行是否包含^M(必须是unix新行)字符?

Vim 为什么可以';t grep显示找到的行是否包含^M(必须是unix新行)字符?,vim,terminal,grep,newline,ansi-escape,Vim,Terminal,Grep,Newline,Ansi Escape,我的vimrc文件中有宏行,如: let @i = "oif (^[a) {^[a^M}^[k0f)" 其中“^[”和“^M”是在插入模式下通过“Ctrl-V”输入的字符,因此它们必须是转义和换行符(我使用的是Linux,Vim配置为使用“\n”换行符,但我不知道这个字符在vimrc文件中到底是什么) 当我用grep-b2'I=“”~/.vimrc搜索这样一行时,我看到一个完全中断的输出: hi Comment cterm=none ctermbg=226 ctermfg=009 guibg=

我的vimrc文件中有宏行,如:

let @i = "oif (^[a) {^[a^M}^[k0f)"
其中“^[”和“^M”是在插入模式下通过“Ctrl-V”输入的字符,因此它们必须是转义和换行符(我使用的是Linux,Vim配置为使用“\n”换行符,但我不知道这个字符在vimrc文件中到底是什么)

当我用
grep-b2'I=“”~/.vimrc
搜索这样一行时,我看到一个完全中断的输出:

hi Comment cterm=none ctermbg=226 ctermfg=009 guibg=#ffff00 guifg=#ff0000

}0f)"i = "oif () {
虽然我想:

hi Comment cterm=none ctermbg=226 ctermfg=009 guibg=#ffff00 guifg=#ff0000

let @i = "oif (^[a) {^[a^M}^[k0f)"
或者至少是类似的,第三行以
let@i
开头。但是我看到
}0f)“i=”oif(){
并且没有
let@i
的迹象

我试着进行了一些调查,发现在该行包含“^M”字符之前,它都能正常工作。


有谁能告诉我如何修复它,或者至少解释一下发生了什么吗?

grep
正在发送 (例如
^[a
^[k
;请参阅) 和 (
^M
)到终端时,他们正在干扰输出,这是 被其他命令过滤时显示,如:

grep -B 2 'i = "' ~/.vimrc | cat -v

这就是关于
-v

-v, --show-nonprinting
    use ^ and M- notation, except for LFD and TAB
以下是相关的剪报:

这些控制序列通常用于发送不可打印的字符 到终端,允许用户通过添加 (前景和背景)颜色,移动光标等

无效的转义序列,如
^[a
^[k
被忽略,因此您将获得 如果宏的定义如下,则会出现相同的问题:

let @i = "oif () {^M}0f)"
被调用并通知终端 在打印该行的其余部分之前,将光标移动到行的开头 输出(将覆盖以前的输出)。这类似于键入
0
在正常模式下,按
R
,然后输入

}0f)"
你自己在:

let @i = "oif () {^M}0f)"

我希望这个答案是有帮助的。

挑剔:
^[a
^[k
被称为转义序列,因为
^[
是转义。
^M
不是转义序列:没有转义……从技术上讲,它只是一个序列(因为它是一个字符).这是一个控制字符。我想你们可以统称它们为控制序列。
}0f)"
let @i = "oif () {^M}0f)"