Я недавно спросил:
Как добавить префикс к каждой строке?
Итак, перейдите из кода ниже:
I said Hello
I said There
I said I am some code
Кодировать как:
Hello
There
I am some code
Теперь, как мне удалить n символов из строки?
Я недавно спросил:
Как добавить префикс к каждой строке?
Итак, перейдите из кода ниже:
I said Hello
I said There
I said I am some code
Кодировать как:
Hello
There
I am some code
Теперь, как мне удалить n символов из строки?
Ответы:
Это даже проще! Опять же, используйте команды прямоугольника . Переместитесь в один угол прямоугольника, который хотите удалить, нажмите, C-SPC
чтобы установить метку. Переместитесь в другой угол прямоугольника и нажмите C-x r d
( delete-rectangle
). Например, перейдите к первой строке, по которой вы хотите действовать, нажмите C-a
или, home
чтобы перейти к началу строки, перейдите к последней строке, по которой вы хотите действовать, чтобы перейти в правый нижний угол, а затем удалить.C-u number C-f
C-x r d
Если в последней строке меньше нужного количества символов, может быть удобнее использовать нижний левый и верхний правый углы. Кроме того, вы можете вставить ненужные символы (это полезно, если первая и последняя строки короче).
Вы можете использовать, C-x r k
чтобы убить прямоугольник, что позволит вам дергать ( C-x r y
) его позже (переместитесь в верхний левый угол места, где вы хотите вставить его).
Вы также можете использовать C-x r t
( string-rectangle
) и ввести пустую строку.
Команды прямоугольника основаны на положениях столбцов. Если вы хотите удалить n символов, а не n столбцов (что имеет значение для многостолбцовых символов, таких как вкладки), вы можете использовать замену регулярного выражения : заменить ^.\{42\}
ничем, чтобы удалить первые 42 символа каждой строки.
Еще одна возможность: мне действительно нравится использовать несколько курсоров для подобных задач. Доступный package.el
через MELPA, он стал неотъемлемой частью моего emacs. Я бы просто выбрал I said
(и, возможно, включил разрыв строки перед ним), использовал M-x mc/mark-all-like-this
и был бы на моем пути. Если вы хотите более детальный контроль, вы можете использовать mc/mark-next-like-this
или mc/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
Если вы cua-mode
включили, то:
Я предпочитаю cua-mode
способ работы, по сравнению со стандартным прямоугольником Emacs, где эквивалент будет:
cua-mode
Сохраняет три нажатия клавиш по сравнению со стандартным Emacs прямоугольника.
Для полноты: удаление первых 3 символов из каждой строки (формально: из точки или в регионе) может быть выполнено путем замены регулярного выражения ^...
(или, в более общем ^.\{3\}
случае:) пустой строкой.
Объяснение: в регулярном выражении ^
означает «начало строки», .
означает «любой символ» и \{n\}
означает « n повторений вещи до».
Это дает дополнительное преимущество !
, заключающееся в том, что он интерактивный (если не нажимать , что делает query-regexp-replace
замену всего без дальнейших вопросов).
И еще одна возможность:
F3C-aC-3C-dC-nF4
записывает макрос клавиатуры, говоря в основном: «перейти к началу строки, удалить три символа и перейти к следующей строке». Затем вы можете воспроизвести его до конца буфера C-uF4или C-xC-krприменить его к строкам в области. У этого есть один недостаток: он сломается, когда любая строка содержит менее 3 символов.