有一行有10000个字符,如何快速选择/替换/删除1234到5678之间的字符? 更好的Vim,但如果emacs可以做,那也很好,谢谢。
答案 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-command
(C-SPC
)激活该区域。 M-g TAB 1234 RET C-SPC M-g TAB 5678 RET
将选择感兴趣的区域。然后,您可以使用narrow-to-region
(C-x n n
)将缓冲区缩小到所选区域。缩小缓冲区允许您编辑缩小的区域而不影响其余区域。修改完成后,您可以使用widen
(C-x n w
)加宽。