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

slipmthgoose
источник
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 \

Вернитесь в любой режим.

enkdr
источник
0

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

Айад Фарис
источник