Я нещодавно запитав:
Як додати префікс до кожного рядка?
Тож перейдіть з наведеного нижче коду:
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! епізод: http://emacsrocks.com/e13.html
Якщо ви cua-mode
ввімкнули, то:
Я віддаю перевагу cua-mode
способу роботи, порівняно зі стандартним прямокутником Emacs, де еквівалент буде:
cua-mode
Зберігає три натискання клавіш по порівнянні зі стандартним Emacs прямокутника.
Для повноти: видалення перших 3 символів з кожного рядка (формально: з точки далі або в регіоні) може бути здійснено шляхом заміни повторним виразом ^...
(або більш загально ^.\{3\}
:) порожнім рядком.
Пояснення: у regexen ^
означає "початок рядка", .
означає "будь-який символ" і \{n\}
означає " n повторень речі раніше".
Це має додаткову перевагу бути інтерактивною (якщо не натискати !
, що змушує query-regexp-replace
замінити все відтепер без зайвих питань).
І ще одна можливість:
F3C-aC-3C-dC-nF4
записує макрос клавіатури, кажучи в основному "перейти до початку рядка, видалити три символи та перейти до наступного рядка". Потім ви можете відтворити його до кінця буфера C-uF4, або C-xC-krзастосувати його до рядків у регіоні. У цього є один недолік: він порушиться, коли будь-який рядок містить менше 3 символів.