将所需操作记录到注册商o
后,我将整个宏粘贴到我的~/.vimrc
并按如下方式分配(直接粘贴映射未正确显示)
我想使用这个宏来为自己创建一个新的“注释行”,它引导一个新的脚本部分,格式化为该部分的名称居中。填充“部分标题”后,我想在新行中输入插入模式。
在以下屏幕记录中,我已根据需要对@o
和@p$ on the word "time". The second attempt with
@ p`进行了测试。
正如您所见,@o
映射获取了垃圾短语,这是我对宏的定义的一部分。这是否与^M
运算符有关?而且,如何修复使用@o
填充该行的*
映射?
这两个映射在Linux系统上运行良好。 (不知道为什么,因为我已经在Windows机器上记录并粘贴了宏定义。)在使用MacVim的Mac上,这似乎也没有问题。
^M
运算符(<CR>
或“输入”-key)?^[
运算符(<ESC>
或“Escape”键)?q
记录。用^M
替换宏定义中的\r
标记。并且,将^[
替换为\x1b
,用于 ESC 键。映射固定如下:
let @o = ":center\ri\r\x1bkV:s/ /\*/g\rJx50A\*\x1b80d|o"
let @p = ":center\ri\r\x1bkV:s/ /\"/g\rJx50A\"\x1b80d|o"
感谢Zbynek Vyskovsky,图片很清晰。对于任何人可能想到的关键,Vim将其ASCII值取为“面值”。 (诀窍是使用以\x
开头的转义子句,其中x
作为连接到十六进制值的引导键/字符串/字符。)因此,对应列表(不完整),去如下:
\x0d
--- \r
\x1b
--- \e
偶然地,:help expr-quote
给出了以下特殊字符列表。这应作为一般形式的原始问题的明确答案。
string *string* *String* *expr-string* *E114*
------
"string" string constant *expr-quote*
Note that double quotes are used.
A string constant accepts these special characters:
\... three-digit octal number (e.g., "\316")
\.. two-digit octal number (must be followed by non-digit)
\. one-digit octal number (must be followed by non-digit)
\x.. byte specified with two hex numbers (e.g., "\x1f")
\x. byte specified with one hex number (must be followed by non-hex char)
\X.. same as \x..
\X. same as \x.
\u.... character specified with up to 4 hex numbers, stored according to the
current value of 'encoding' (e.g., "\u02a4")
\U.... same as \u but allows up to 8 hex numbers.
\b backspace <BS>
\e escape <Esc>
\f formfeed <FF>
\n newline <NL>
\r return <CR>
\t tab <Tab>
\\ backslash
\" double quote
\<xxx> Special key named "xxx". e.g. "\<C-W>" for CTRL-W. This is for use
in mappings, the 0x80 byte is escaped.
To use the double quote character it must be escaped: "<M-\">".
Don't use <Char-xxxx> to get a utf-8 character, use \uxxxx as
mentioned above.
Note that "\xff" is stored as the byte 255, which may be invalid in some
encodings. Use "\u00ff" to store character 255 according to the current value
of 'encoding'.
Note that "\000" and "\x00" force the end of the string.
答案 0 :(得分:1)
当您使用vim表达式语言进行注册时,它绝对可以以平台无关的方式进行。 vim表达式中的字符串理解标准转义序列,因此最好将^M
替换为\r
,将Esc
替换为\x1b
:
let @o = ":center\riSomeInsertedString\x1b"
据我所知,没有要翻译的特殊字符列表,但您可以简单地获取所有控制字符(ASCII低于32)并将它们转换为相应的转义序列“\xHexValue
”,其中HexValue是角色的价值。即使\r
(或^M
)也可以转换为\x0d
,因为其ASCII值为13
(0x0d
十六进制)。