如果保存的vim宏在其中有^ M时如何工作?

时间:2017-06-23 17:54:09

标签: vim macros

我编写了一个宏来删除某些文本的某些部分,首先删除序言和文本的结尾,然后删除中间的一些行。

当我直接编写并使用宏时,这是有效的,但后来我尝试将宏保存在我的vimrc文件中,然后它就不再工作了。

如何解决此问题以使回车符合我预期的行为?

保存在.vimrc文件中的宏是:

let @r='/+\/-^Mdd'
let @y='v/A \\ Z\^M<80>kuxGvN/*\^Mxgg100@r'

基于.vimrc文件使用它时的结果是A \ Z的搜索正确启动,但^ M不会导致新行发生,它被认为是搜索的一部分,如下所示: Output of running the macro

有问题的文件(缩短):

**** Residual nuclei distribution  **** ****           (Bq/cmc)            ****



  A \ Z   57         58         59         60         61         62         63         64         65         66         67
 154   0.00E+00   0.00E+00   0.00E+00   0.00E+00   0.00E+00   0.00E+00   5.64E+00   0.00E+00   0.00E+00   0.00E+00   0.00E+00
      +/- 0.0 %  +/- 0.0 %  +/- 0.0 %  +/- 0.0 %  +/- 0.0 %  +/- 0.0 %  +/- 8.4 %  +/- 0.0 %  +/- 0.0 %  +/- 0.0 %  +/- 0.0 %
 152   0.00E+00   0.00E+00   0.00E+00   0.00E+00   0.00E+00   0.00E+00   4.45E+01   0.00E+00   0.00E+00   0.00E+00   0.00E+00
      +/- 0.0 %  +/- 0.0 %  +/- 0.0 %  +/- 0.0 %  +/- 0.0 %  +/- 0.0 %  +/- 3.8 %  +/- 0.0 %  +/- 0.0 %  +/- 0.0 %  +/- 0.0 %
  A \ Z    1
   3   4.50E+02
      +/- 1.6 %


  **** Isomers (Bq/cmc)     ****
      A        Z       mth
       34      17       1    1.37E+04 +/- 35.2 %
       42      21       1    5.96E-12 +/- 26.1 %
       44      21       1    6.90E+03 +/- 11.9 %

预期输出

A \ Z   57         58         59         60         61         62         63         64         65         66         67
     154   0.00E+00   0.00E+00   0.00E+00   0.00E+00   0.00E+00   0.00E+00   5.64E+00   0.00E+00   0.00E+00   0.00E+00   0.00E+00
     152   0.00E+00   0.00E+00   0.00E+00   0.00E+00   0.00E+00   0.00E+00   4.45E+01   0.00E+00   0.00E+00   0.00E+00   0.00E+00
A \ Z    1
3   4.50E+02

(忽略输出中的空白问题,这只是因为堆栈溢出)

1 个答案:

答案 0 :(得分:2)

我会使用双引号和键符号。

let @r = "/+\\/-\<cr>dd"
let @y = "v/A \\\\ Z\\<cr>kuxGvN/*\\\<cr>xgg100@r"

基本上所有代表 return ^M都会转换为关键符号<cr>。所有关键表示法都需要使用\以及\字符进行转义。

如果你发现自己一直在使用这些,我建议你创建映射而不是使用寄存器。

如需更多帮助,请参阅:

:h key-notation
:h expr-quote