在Vim中,有一行有10000个字符,如何快速选择/替换/删除1234到5678之间的字符?

时间:2016-12-23 13:11:51

标签: vim emacs editor

有一行有10000个字符,如何快速选择/替换/删除1234到5678之间的字符? 更好的Vim,但如果emacs可以做,那也很好,谢谢。

2 个答案:

答案 0 :(得分:4)

使用:substitute

您可以跳过前1233个字符,然后使用:help /\{多个来捕获5678 - 1234 + 1 = 4445个字符,并使用:help /\zs设置匹配开始:

:substitute/^.\{1233}\zs.\{4445}/REPLACEMENT/

普通模式

转到第一个字符(0,1233右边,然后通过4445l动作处理下一个4445.例如,删除:01223ld4445l

直接寻址

这两种方法的坏处是你需要计算差异(在你的例子中为4445)。您可以通过表达式寄存器(<C-r>=5678-1234+1<CR>)在命令行中执行此操作。

或者,如果没有双宽度或制表符,则可以通过:help /\%v正则表达式原子或|正常模式直接寻址屏幕列命令:

:substitute/\%1234v.*\%5678v./REPLACEMENT/

1234|d5678|

答案 1 :(得分:0)

在Emacs中,导航到该行并使用move-to-column(默认情况下绑定到M-g TAB)。使用set-mark-commandC-SPC)激活该区域。 M-g TAB 1234 RET C-SPC M-g TAB 5678 RET将选择感兴趣的区域。然后,您可以使用narrow-to-regionC-x n n)将缓冲区缩小到所选区域。缩小缓冲区允许您编辑缩小的区域而不影响其余区域。修改完成后,您可以使用widenC-x n w)加宽。