如何在不同长度的多行末尾附加数字序列?

时间:2013-12-07 16:58:45

标签: vim emacs editor

我正在重写一些脚本。我想附加这样的许多行:

short=s[
verylongword=s[
P=s[

这些数字:

0
1
2

要得到这个:

short=s[0
verylongword=s[1
P=s[2

我已尝试使用VIM ctrl + v put我不能把它们放在行尾...如果使用vim,即使使用emacs也是最好的方法...

修改 现在我知道我可以使用this method来完成它,如果我的列中的数字就像我的示例中那样,那么问题是如何在不先写入序列的情况下更快地附加数字序列?

3 个答案:

答案 0 :(得分:3)

使用vim,您可以使用以下搜索和替换语句

%s/$/\=line('.')-1

击穿

%                    apply to entire buffer
s                    substitute
/$                   search for end of line
/\=line('.')-1       replace with linenumber - 1

答案 1 :(得分:2)

你问过vim或Emacs ......

在Emacs中,您只需选择要修改的行,然后执行:

replace-regexp RET $ RET \# RET

(在库存Emacs设置上为M-x replace-regexp...

\#是一个特殊的替换,从0开始,每次进行替换时都会递增。这很棒,你当然可以将它与其他elisp替换混合。

例如,如果您想为从100开始的条目编号:

replace-regexp RET $ RET \,(+ 100 \#) RET

答案 2 :(得分:0)

在Emacs中,您还可以使用键盘宏来执行此操作。使用第一行(short=s[)末尾的点,定义如下:

F3 启动宏定义

F3 插入宏计数器(默认情况下从0开始)

C-f 移至下一行的开头

C-e 移至行尾

F4 结束宏定义

执行宏

  • 通过反复按 F4 手动
  • 指定一个前缀参数,表示您想要重复宏的次数(n): Cu n F4
  • 指定前缀参数0以重复所有剩余行的宏: C-u n F4

如果您希望编号从不等于零的值开始,请通过发出 M-x kmacro-set-counter来设置宏计数器值。此命令的默认键绑定是 C-x C-k C-c