Emacs宏加入线?

时间:2009-08-25 20:32:39

标签: emacs

我有几千行分隔数据。不幸的是,我的一些数据被包裹到一个新行。如何搜索所有不包含我的分隔线的行然后与前一行连接,跳到下一行然后继续直到缓冲区结束?

之前的缓冲区

1243 |这是一个人 线
1235 |这适用于一行。
43223 |这条线包裹
出于某种原因。

之后的缓冲区

1243 |这是一条线 1235 |这适用于一行。
43223 |这条线由于某种原因包装。

3 个答案:

答案 0 :(得分:5)

这对键盘宏来说非常好。尝试这样的事情:

C-x (
M-x isearch-forward-regexp RET
^[^|]*$ RET
M-^
C-x )

where
  C-x (                            begins recording a keyboard macro, which consists of
  M-x isearch-forward-regexp RET   searching forward using a regular expression
  ^[^|]*$                          representing a line containing no | characters, then
  M-^                              joining the current line to the previous line and
  C-x )                            ending the keyboard macro definition.

可以使用Cx e(kmacro-end-and-call-macro)多次手动调用此宏,也可以将其保存为函数,并按http://www.emacswiki.org/emacs/KeyboardMacrosTricks所述以编程方式调用它。

答案 1 :(得分:4)

尝试M-x query-replace-regexp,搜索

^\(.\+|.\+\)\n\([^|]\+\)$

替换:

\1\2

HTH

答案 2 :(得分:1)

(global-set-key(kbd“C-c C-j”)'join-line)