Макрос Emacs для объединения строк? - PullRequest
6 голосов
/ 26 августа 2009

У меня есть несколько тысяч строк данных с разделителями. К сожалению, некоторые из моих данных перенесены на новую строку. Как я могу найти все строки, которые не содержат мой разделитель, затем соединиться с предыдущей строкой, перейти к следующей строке и продолжить до конца буфера?

Буфер до

1243 | Это все одно
линия
1235 | Умещается на одной строке.
43223 | Эта строка переносит
по какой-то причине.

Буфер после

1243 | Это все одна строка
1235 | Умещается на одной строке.
43223 | Эта строка почему-то переносится.

Ответы [ 3 ]

5 голосов
/ 26 августа 2009

Это хорошая работа для клавиатурных макросов. Попробуйте что-то вроде этого:

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.

Этот макрос может быть вызван вручную несколько раз с помощью C-x e (kmacro-end-and-call-macro), или вы можете сохранить его как функцию и вызвать его программно, как описано в http://www.emacswiki.org/emacs/KeyboardMacrosTricks.

4 голосов
/ 26 августа 2009

Попробуйте M-x query-replace-regexp, найдите

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

И замена:

\1\2

НТН

1 голос
/ 20 сентября 2011

(глобальный набор ключей (kbd "C-c C-j") 'линия соединения)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...