Я недавно спросил:
Как добавить префикс к каждой строке?
Итак, перейдите из кода ниже:
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-fC-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 символов.