Как свернуть пробелы в регионе?
Скажем, у меня есть этот табличный текстовый файл:
field1 variable_length_field variable_length_field
aaaaaa aaaa aaaaaaaaa
bbbbbb bbbbbbbbbbbbbbbbbbbb bbbb
Как я могу преобразовать его в:
field1 variable_length_field variable_length_field
aaaaaa aaaa aaaaaaaaa
bbbbbb bbbbbbbbbbbbbbbbbbbb bbbb
Я знаю, что я мог бы использовать replace-regexp
в области, но регулярные выражения Emacs не возникают естественным образом. Я искал что-то вроде delete-whitespace-rectangle
, но это не делает то, что я ожидаю, или я злоупотребляю им. Также желательно иметь возможность делать это для столбца, т.е.
field1 variable_length_field variable_length_field
aaaaaa aaaa aaaaaaaaa
bbbbbb bbbbbbbbbbbbbbbbbbbb bbbb
Ответы
Ответ 1
Эта функция должна выполнить трюк:
(defun just-one-space-in-region (beg end)
"replace all whitespace in the region with single spaces"
(interactive "r")
(save-excursion
(save-restriction
(narrow-to-region beg end)
(goto-char (point-min))
(while (re-search-forward "\\s-+" nil t)
(replace-match " ")))))
И, поскольку вопрос был обновлен для применения к пробелам в прямоугольнике, попробуйте следующее:
(require 'rect)
(defun just-one-space-in-rect-line (start end)
(save-restriction
(save-match-data
(narrow-to-region (+ (point) start)
(+ (point) end))
(while (re-search-forward "\\s-+" nil t)
(replace-match " ")))))
(defun just-one-space-in-rect (start end)
"replace all whitespace in the rectangle with single spaces"
(interactive "r")
(apply-on-rectangle 'just-one-space-in-rect-line start end))
Ответ 2
Не отвечаю на ваш вопрос, но есть
M-SPC runs the command just-one-space, which is an interactive
compiled Lisp function in `simple.el'.
It is bound to M-SPC.
(just-one-space &optional N)
Delete all spaces and tabs around point, leaving one space (or N spaces).
[back]
который полезен, когда вы хотите удалить пробелы в одном случае. Он может быть подходящим для случая макросов, где удаления являются случайными строками без фиксированного шаблона.
Ответ 3
Вы можете обращаться с вашими требованиями к прямоугольникам, используя средства редактирования прямоугольника cua-mode *.
-
M-x cua-selection-mode
RET или (cua-selection-mode 1)
(я сам включил его постоянно).
-
Отметьте прямоугольник, в котором вы хотите свернуть пробелы, используя C-RET и обычные клавиши перемещения.
-
Вызов cua-replace-in-rectangle
:
M-r \s-+
RET SPC RET
-
C-RET снова, чтобы закончить редактирование прямоугольника.
(*) Это не сработает, если вам нужно, чтобы поля справа от прямоугольника оставались выровненными, так как в этом случае вам нужно будет вставить новые пробелы для компенсации тех, которые были удалены. Вы можете использовать 2C-split
и 2C-merge
или просто убить/вытащить правый прямоугольник, чтобы обойти это.
Ответ 4
Используете ли вы IDE? Если вы используете что-то вроде Eclipse, тогда вы можете форматировать в нем параметры пробелов. (В Eclipse нажмите CTRL + 3 и найдите "formatter". Я извиняюсь за то, что не помню точный путь!) Затем вы должны иметь возможность выделить все и нажать ctrl + shift + G для автоматического форматирования всего.
Сообщите нам, если это поможет! (Или, если вы хотите использовать код раскрутки, который сделает это, дайте нам знать язык.)