我相信textmate的模式是,如果您开始输入文字,则会在您选择的所有行中输入相同的内容。emacs中有与此类似的东西吗?我猜矩形有一种可以帮助我的方式,但是我不确定如何...
我相信textmate的模式是,如果您开始输入文字,则会在您选择的所有行中输入相同的内容。emacs中有与此类似的东西吗?我猜矩形有一种可以帮助我的方式,但是我不确定如何...
Answers:
就这么简单:Cx rt
一些示例在这里:http : //ergoemacs.org/emacs/emacs_string-rectangle_ascii-art.html
C-x
映射到剪切(cua模式),所以这不是一个好主意。
C-x
剪切的想法,这不是很好:)
(global-unset-key (kbd "M-<down-mouse-1>"))
(global-set-key (kbd "M-<mouse-1>") 'mc/add-cursor-on-click)
到您的配置中。
解决方案之一是使用CUA模式。使用激活CUA模式M-x cua-mode
,开始选择矩形:首先按下,C-Enter
然后使用标准移动命令移动光标以进行选择,现在随时按Enter键将使光标在矩形的各个角之间循环,从而使您可以在选择之前或之后添加文本。
cua-selection-mode
代替cua-mode
,则不会得到不需要的剪切/复制/粘贴绑定。但是,您将获得一些您可能不想要的其他功能(最值得注意的是,编辑命令替换了该区域)。
您可以使用以下命令(和键)来完成此操作:
以下是这些功能的完整说明:http : //www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html
对于那些想在更复杂的情况下执行此操作并且不想安装新模块的人,请继续阅读。(尽管我个人使用并喜欢MarkMultiple,但在Emacs中无需安装MarkMultiple即可实现)
最近,我不得不将SQL查询输出到文件,然后将其格式化为MYSQL INSERT查询。这就是Emacs使我的生活变得轻松的方式。
文件看起来像:
1 I am a random text
2 I am not
3 G, you've gone mad
4 Click on this link
5 Transfer in progress (we've started the transfer process)
6 But transfer happend yesterday
7 No you are
8 Oh please! this is getting too much!
9 I love emacs
10 I cant be bothered with this any more
11 its time to raise the bar
12 show me how to expand my territory
我想使其看起来像:
(1, ,'I am a random text'),
(2, ,'I am not'),
(3, ,'G, youve gone mad'),
(4, ,'Click on this link'),
(5, ,'Transfer in progress (weve started the transfer process)'),
(6, ,'But transfer happend yesterday'),
(7, ,'No you are'),
(8, ,'Oh please! this is getting too much!'),
(9, ,'I love emacs'),
(10, ,'I cant be bothered with this any more'),
(11, ,'its time to raise the bar'),
(12, ,'show me how to expand my territory'),
C-x (
开始录制宏[此刻正在录制您所有的按键输入,因此请仔细按照说明进行操作]C-a
转到行的开头M-f
向前移动一个单词,然后键入“,”C-n
转到下一行,然后C-x )
结束宏C-u 11 C-x e
重复宏n(在这种情况下为11)次尤里卡!到现在为止,如果您没有失败,您将获得如下所示的内容:
(1, I am a random text
(2, I am not
(3, G, youve gone mad
(4, Click on this link
(5, Transfer in progress (weve started the transfer process)
(6, But transfer happend yesterday
(7, No you are
(8, Oh please! this is getting too much!
(9, I love emacs
(10, I cant be bothered with this any more
(11, its time to raise the bar
(12, show me how to expand my territory
在这一点上,我将让您自己解决其余的问题。但是,在我走之前,我想提一提,有很多方法可以实现这种目的。这只是这些方式之一,它恰好是我最喜欢的方式。
希望对您有所帮助;)
我相信您正在寻找boskom建议的cua模式。http://www.vimeo.com/1168225?pg=embed&sec=1168225该截屏视频可能会让您了解如何使用此功能。
上面显示的答案用于在列中插入文本。TextMate的“编辑选择中的每一行”在每行中插入相同的文本,而不管每行的长度如何。我现在正在学习Lisp,因此作为练习,我编写了一个函数来做到这一点:
(defun append-to-lines (text-to-be-inserted)
;;Appends text to each line in region
(interactive "sEnter text to append: ")
(save-excursion
(let (point-ln mark-ln initial-ln final-ln count)
(barf-if-buffer-read-only)
(setq point-ln (line-number-at-pos))
(exchange-point-and-mark)
(setq mark-ln (line-number-at-pos))
(if (< point-ln mark-ln)
(progn (setq initial-ln point-ln final-ln mark-ln)
(exchange-point-and-mark))
(setq initial-ln mark-ln final-ln point-ln))
(setq count initial-ln)
(while (<= count final-ln)
(progn (move-end-of-line 1)
(insert text-to-be-inserted)
(next-line)
(setq count (1+ count))))
(message "From line %d to line %d." initial-ln final-ln ))))
您首先进行选择,其中包含要影响的所有行,然后使用Mx附加行来运行该函数。