Як видалити перші кілька n символів кожного рядка?


15

Я нещодавно запитав:

Як додати префікс до кожного рядка?

Тож перейдіть з наведеного нижче коду:

I said Hello
I said There
I said I am some code

Для кодування типу:

Hello
There
I am some code

Тепер, як видалити n ряд символів з рядка?


IMHO це те саме, що і ваше попереднє запитання.
A_P

Відповіді:


28

Ще простіше! Знову ж використовуйте команди прямокутника . Перейдіть до одного кута прямокутника, який потрібно видалити, натисніть, 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 символи кожного рядка.


3
замість того, щоб намагатися запам'ятати всі команди прямокутника, ви можете також використовувати Cx spc, а не C-spc, що перетворює вашу область у прямокутник і все просто працює.
Малабарба

1
@Malabarba Хоча лише з Emacs 24. (Пишучи це на машині з Emacs 23. Їх ще дуже багато.)
Жил "SO- перестань бути злим"

2
Мої співчуття ... :-(
Malabarba

Це щойно працювало для мене на GNU Emacs 23.4.1 (x86_64-pc-linux-gnu, GTK + версія 2.24.21) 2013-10-25 на allspice, модифікованому Debian
davidrmcharles

4

Інша можливість: мені дуже подобається використовувати декілька курсорів для подібних завдань. Доступний 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


3

Якщо ви cua-modeввімкнули, то:

  • C-a перейти до початку рядка,
  • C-RET щоб почати прямокутник,
  • Потім перемістіться клавішами зі стрілками або будь-якою командою переміщення Emacs C-f
  • DEL щоб видалити виділення

Я віддаю перевагу cua-modeспособу роботи, порівняно зі стандартним прямокутником Emacs, де еквівалент буде:

  • C-a перейти до початку рядка,
  • C-SPC щоб почати прямокутник,
  • Потім перемістіться клавішами зі стрілками або будь-якою командою переміщення Emacs C-f
  • C-x r d щоб видалити виділення

cua-modeЗберігає три натискання клавіш по порівнянні зі стандартним Emacs прямокутника.


3

Для повноти: видалення перших 3 символів з кожного рядка (формально: з точки далі або в регіоні) може бути здійснено шляхом заміни повторним виразом ^...(або більш загально ^.\{3\}:) порожнім рядком.

Пояснення: у regexen ^означає "початок рядка", .означає "будь-який символ" і \{n\}означає " n повторень речі раніше".

Це має додаткову перевагу бути інтерактивною (якщо не натискати !, що змушує query-regexp-replaceзамінити все відтепер без зайвих питань).


1
Чому голоси?
mbork

0

І ще одна можливість:

F3C-aC-3C-dC-nF4

записує макрос клавіатури, кажучи в основному "перейти до початку рядка, видалити три символи та перейти до наступного рядка". Потім ви можете відтворити його до кінця буфера C-uF4, або C-xC-krзастосувати його до рядків у регіоні. У цього є один недолік: він порушиться, коли будь-який рядок містить менше 3 символів.


-1

Якщо це лише рядок, який ви можете заповнити, щоб Mz вважав, що символ не повторюється між точкою та тією, яку ви хочете видалити. У деяких випадках це швидше, ніж створення регіону.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.