在 emacs evil 中增加视觉垂直块选择中的数字
increment numbers in visual vertical block selection in emacs evil
我多年来一直使用 https://github.com/vim-scripts/increment.vim--Avadhanula 来 vim。
如何在 emacs 中利用类似的功能?
想法是这样的:
给出如下列表:
the_array[0]
the_array[0]
the_array[0]
我希望能够 select 所有零,发出命令,并将文本替换为:
the_array[0]
the_array[1]
the_array[2]
如果重要的话,我正在使用 emacs 邪恶模式,希望为我想要增加的数字区域做一个块 select 的等价物。
谢谢,
一种方法是在要增加的数字上设置一个区域,然后缩小到该区域(通常绑定到 C-x n n),然后使用 replace-regexp
用一些 elisp 来生成替换文本。类似下面的内容将起作用,其中 keyboard font 中显示的文本是您输入的内容,text shown in code font
是 emacs 提示您的内容,您应该点击 在每行后面输入:
M-x 替换正则表达式
Replace regexp:
[0-9]+
Replace regexp [0-9]+ with:
\,(1- (line-number-at-pos (point)))
用于替换的 \,( ... )
构造是 elisp,replace-regexp
执行它以生成替换文本。在这种情况下,elisp 获取要替换的每个匹配项的行号,从中减去 1(因为我们的缩小区域从第 1 行开始),并将结果值 returns 作为替换文本。如果您希望数组索引以 0 以外的其他内容开头,请相应地修改数学。
假设您从缓冲区中的这段文本开始:
the_array[0]
the_array[0]
the_array[0]
将光标移动到第一个0
并使用C-v 2 j d
删除所有零。 C-v } F 0 d
将适用于任意数量的行,只要最后 the_array[0]
行位于段落末尾,但请注意,它需要在您的配置中使用 (setq evil-cross-lines t)
。
无论您如何删除 0
,现在您的缓冲区中应该有这个:
the_array[]
the_array[]
the_array[]
Select 所有结尾 ]
的方式与您选择 0
的方式相同。现在按 C-u C-x r N 0 <Enter> <Backspace> <Enter>
。 C-x r N
运行 rectangle-number-lines
,它在使用前缀参数 (C-u
) 调用时提示输入起始编号和格式字符串。我们指定它应该以 0 开头并仅插入数字(在这种情况下,<Backspace>
删除尾随 space)。
您的缓冲区现在应该包含:
the_array[1]
the_array[2]
the_array[3]
我多年来一直使用 https://github.com/vim-scripts/increment.vim--Avadhanula 来 vim。
如何在 emacs 中利用类似的功能?
想法是这样的:
给出如下列表:
the_array[0]
the_array[0]
the_array[0]
我希望能够 select 所有零,发出命令,并将文本替换为:
the_array[0]
the_array[1]
the_array[2]
如果重要的话,我正在使用 emacs 邪恶模式,希望为我想要增加的数字区域做一个块 select 的等价物。
谢谢,
一种方法是在要增加的数字上设置一个区域,然后缩小到该区域(通常绑定到 C-x n n),然后使用 replace-regexp
用一些 elisp 来生成替换文本。类似下面的内容将起作用,其中 keyboard font 中显示的文本是您输入的内容,text shown in code font
是 emacs 提示您的内容,您应该点击 在每行后面输入:
M-x 替换正则表达式
Replace regexp:
[0-9]+
Replace regexp [0-9]+ with:
\,(1- (line-number-at-pos (point)))
用于替换的 \,( ... )
构造是 elisp,replace-regexp
执行它以生成替换文本。在这种情况下,elisp 获取要替换的每个匹配项的行号,从中减去 1(因为我们的缩小区域从第 1 行开始),并将结果值 returns 作为替换文本。如果您希望数组索引以 0 以外的其他内容开头,请相应地修改数学。
假设您从缓冲区中的这段文本开始:
the_array[0]
the_array[0]
the_array[0]
将光标移动到第一个0
并使用C-v 2 j d
删除所有零。 C-v } F 0 d
将适用于任意数量的行,只要最后 the_array[0]
行位于段落末尾,但请注意,它需要在您的配置中使用 (setq evil-cross-lines t)
。
无论您如何删除 0
,现在您的缓冲区中应该有这个:
the_array[]
the_array[]
the_array[]
Select 所有结尾 ]
的方式与您选择 0
的方式相同。现在按 C-u C-x r N 0 <Enter> <Backspace> <Enter>
。 C-x r N
运行 rectangle-number-lines
,它在使用前缀参数 (C-u
) 调用时提示输入起始编号和格式字符串。我们指定它应该以 0 开头并仅插入数字(在这种情况下,<Backspace>
删除尾随 space)。
您的缓冲区现在应该包含:
the_array[1]
the_array[2]
the_array[3]