Як замінити символ на новий рядок у Emacs?


285

Я намагаюся замінити символ - скажімо ;- на новий рядок, використовуючи replace-stringта / або replace-regexpв Emacs.

Я спробував такі команди:

  • M-x replace-string RET ; RET \n

    Це замінить ;2 символів: \n.

  • M-x replace-regex RET ; RET \n

    Це призводить до наступної помилки (показаної в мінібуфері):

    Неправильне використання "\" в тексті заміни.

Що не так у використанні replace-stringдля цього завдання? Чи є якийсь інший спосіб зробити це?

Дякую.

Відповіді:


427

M-x replace-string RET ; RET C-q C-j.

  • C-qдля quoted-insert,

  • C-j - це новий рядок.

Ура!


3
Cq насправді quote-insertкотирує наступного символу.
Джо Касадонте

2
Я вважаю, що це насправді "котирування", а не "цитата", як у "котировці". Принаймні, так і є у версії 22.1.
Брайан Оуклі

8
C-jце буквальний 0x0aкод управління, порівняно з Retяким є ключовим поруч із вашою пропозицією та пропозицією 0x0d. en.wikipedia.org/wiki/C0_and_C1_control_codes
Джонатан Аркелл

2
Примітка для користувачів vim, використовуючи C-jв emacs , а C-mв vim .
Альфа ТАН

2
@JonathanArkell Опис, як це працює, але не чому . У редакторі Ret створює 0x0a, тож чому він повинен створювати 0x0d у котированій вставці? Це не має сенсу. (Просто тому, що внутрішній код клавіатури з історичних причин 0x0d? Ми використовуємо ключові карти всюди, чому б не тут, де це має ідеальний сенс?)
vog

74

Я знайшов чотири способи ввести нову лінію в мінібуфер.

  1. C-o

  2. C-q C-j

  3. C-q 12 (12 - вісімкове значення нового рядка)

  4. C-x oдо головного вікна, вкажіть новий рядок C-k, а потім C-x oповерніться до мінібуфера, потягніть йогоC-y


10
+1 для згадки C-o! Один менш ключовий хід порівняно з C-q C-j. Раніше не думав використовувати цей.
itsjeyd

Дякуємо за версію 4! Корисно, якщо у вас є Co і Cq відскок.
Йоахім Ш

Дуже дякую. Чи можете ви пояснити, чому Co працює, а Cq Cj ні?
Крістіан Мадсен

C-oне переміщує крапку після вставки нового рядка в мінібуфер, тому вам потрібно також натиснути клавішу зі стрілкою праворуч, якщо ви хочете вставити щось після нового рядка в рядок заміни.
Робін Грін

У моїй версії Emacs 25.2.2 C-oбуде введено новий рядок у головне вікно при використанні пошуку, в той час C-q C-jяк новий рядок буде введено в мінібуфер. C-oпрацює з запитом - замініть, хоча.
TC Proctor

25

Не забувайте, що ви завжди можете вирізати і вставити в мінібуфер.

Таким чином, ви можете просто скопіювати символ нового рядка (або будь-який рядок) з буфера, а потім вирвати його, коли буде запропоновано замінити текст.


2
Це дійсно гарна ідея для персонажів, яких я не знаю, що ключі пов'язують.
Лей

Ах ах ! так просто !
Jérémy Pouyet

8

Більш чітко:

Щоб замінити символ напів двокрапки (;) на новий рядок, дотримуйтесь цих точних кроків.

  1. знайдіть курсор у лівій верхній частині буфера, що містить текст, який ви хочете змінити
  2. Введіть mx substitu-string та натисніть RETURN
  3. міні-буфер відобразить приблизно так: Замініть рядок (за замовчуванням ^ ->):
  4. Введіть символ, який потрібно замінити. В цьому випадку, ; і натисніть RETURN
  5. міні-буфер відобразить приблизно так: рядок; з:
  6. Тепер виконуємо Cq Cj
  7. Усі екземпляри напів-двокрапки будуть замінені новим рядком (від місця розташування курсора до кінця буфера з'явиться тепер)

Трохи більше, ніж говорить оригінальне пояснення.


2

Перехід у текстовий режим

M-x text-mode

Виділіть блок до відступу

Відступ

C+M \

Переключитися назад у будь-який режим ..


0

вбудований просто: C-M-S-%(якщо обов'язкові ключі все ще за замовчуванням), ніж replace-string^J

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