如何删除每行的前几个n个字符?


Answers:


28

更简单!同样,使用矩形命令。移动到要删除的矩形的一个角,按C-SPC设置标记。移动到矩形的另一个角,然后按C-x r ddelete-rectangle)。例如,移至要操作的第一行,按C-ahome移至该行的开头,向下移至要操作的最后一行,移至右下角,然后删除。C-u number C-fC-x r d

如果最后一行的字符数少于期望的数目,则改用左下角和右上角会更方便。或者,您可以插入垃圾字符(如果第一行和最后一行都较短,则很有用)。

您可以使用C-x r k杀死矩形,以便C-x r y稍后将其拉出()(移动到要插入矩形的位置的左上角)。

您也可以使用C-x r tstring-rectangle)并输入一个空字符串。

矩形命令基于列位置。如果要删除n个字符而不是n个列(这与制表符等多列字符有所不同),则可以使用正则表达式替换:不替换^.\{42\}任何内容可删除每行的前42个字符。


3
除了记住所有矩形命令之外,您还可以使用Cx spc而不是C-spc,它将区域变为矩形,并且一切正常。
马拉巴巴2014年

1
@Malabarba自从Emacs 24开始。(将其写在装有Emacs 23的计算机上。它们仍然存在很多。)
Gilles'SO-别再邪恶了

2
我的哀悼... :-(
马拉巴巴2014年

这仅对我在多香果上的
2013

4

另一种可能性:我真的很喜欢对这样的任务使用多个游标。可package.el通过MELPA获得,它已成为我的emacs不可缺少的一部分。我只需选择I said(并可能在其中包括换行符),使用M-x mc/mark-all-like-this,然后就行了。如果需要更细粒度的控制,可以使用mc/mark-next-like-thismc/mark-next-lines

我的键绑定:

(use-package multiple-cursors
  :bind (("C->"   . mc/mark-next-like-this)
         ("C-M->" . mc/mark-all-like-this-dwim)))

强制性的Emacs Rocks!集:http : //emacsrocks.com/e13.html


3

如果已cua-mode启用,则:

  • C-a 移至行首,
  • C-RET 开始矩形,
  • 然后使用箭头键或任何emacs move命令移动,例如 C-f
  • DEL 删除选择

cua-mode与等效的Emacs标准矩形相比,我更喜欢工作方式:

  • C-a 移至行首,
  • C-SPC 开始矩形,
  • 然后使用箭头键或任何emacs move命令移动,例如 C-f
  • C-x r d 删除选择

cua-mode标准相比,Emacs的矩形可节省三个按键。


3

为了完整起见:可以通过用空字符串进行正则表达式替换^...(或更一般地:)来删除每行的前3个字符(正式地:从该点或区域中)^.\{3\}

说明:在regexen中,^意思是“行的开头”,.意思是“任何字符”,并且\{n\}意思是“ 前事物的n次重复”。

这具有交互性的另一个好处(除非按下!,否则query-regexp-replace从现在起无需进行任何其他疑问就可以替换所有内容)。


1
为什么要下票?
mbork 2014年

0

还有另一种可能性:

F3C-aC-3C-dC-nF4

记录键盘宏,基本上说“移至行首,删除三个字符,然后移至下一行”。然后,您可以按播放它直到缓冲区结束C-uF4,或者C-xC-kr将其应用到区域中的行。这有一个缺点:任何一行少于3个字符时,它将中断。


-1

如果仅是一行,则可以使用Mz快速转换为字符,假设在该点和您要删除的字符之间不重复该字符。在某些情况下,这比创建区域要快。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.