Как заменить символ новой строкой в ​​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.
— Иоахим W

Большое спасибо. Можете ли вы объяснить, почему Co работает, а Cq Cj нет?
— Кристиан Мэдсен

C-oне перемещает точку после вставки новой строки в минибуфер, поэтому вам все равно нужно нажимать клавишу со стрелкой вправо, если вы хотите вставить что-то после новой строки в строке замены.
— Робин Грин

На моей версии Emacs 25.2.2, C-oбудет вводить новую C-q C-jстроку в главном окне при использовании поиска, а также вводить новую строку в минибуфере. C-oработает с запросом - заменить хотя.
— Проктор ТК

25

Не забывайте, что вы всегда можете вырезать и вставить в минибуфер.

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


2
Это действительно хорошая идея для персонажей, которых я не знаю связывание клавиш.
— Лей

Ах ах ! так просто !
— Жереми Пуйе

8

Более подробно:

Чтобы заменить точку с запятой (;) символом новой строки, выполните следующие точные шаги.

  1. найдите курсор в левом верхнем углу буфера, содержащего текст, который вы хотите изменить
  2. Введите mx replace-string и нажмите RETURN
  3. мини-буфер будет отображать что-то вроде этого: Заменить строку (по умолчанию ^ ->):
  4. Введите символ, который вы хотите заменить. В таком случае, ; и нажмите ВЕРНУТЬ
  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.