Как обработать следующую строку в макросе клавиатуры?

12

Я создал макрос клавиатуры для объединения строк в буфере, используя:

F3 C-n M-x join-line RET F4,

Он работает нормально, за исключением случаев, когда строки становятся слишком длинными и начинают переноситься - что делает этот макрос зависимым от ширины кадра. next-lineпохоже, не переходит на следующую фактическую строку, а на «обертывающую» часть текущей строки.

Как обойти эту проблему?

Себастьян Ле Каллонек
источник

Ответы:

13

У вас есть два три варианта:

  1. Используйте next-logical-lineвместо next-lineопределения макроса:

    Переместить курсор вертикально вниз по ARGлиниям. Это идентично next-line, за исключением того, что оно всегда перемещается по логическим линиям вместо визуальных линий, игнорируя значение переменной line-move-visual.

  2. Установите line-move-visualна nil:

    (setq line-move-visual nil)

    Это заставляет next-lineсебя вести себя как next-logical-lineпо умолчанию.

  3. Включите усечение строки, выполнив

    M-x toggle-truncate-lines RET

    перед записью макроса.

itsjeyd
источник
Отлично! Благодарю. Интересно, в какой ситуации вы бы предпочли next-lineнынешнее поведение next-logical-line, а не ...
Себастьян Ле Каллонек
@ SébastienLeCallonnec Я полагаю, что для всего есть
сценарий
1
@ SébastienLeCallonnec Эмм ... когда пишешь на естественном языке? В ситуации, не ориентированной на линию, нажатие <down>или C-nобычно заставляет вас перейти на одну строку вниз, а не перепрыгнуть через границу линии. Подумайте, что не каждый пользователь приходит из блокнота (там, где нет переноса строк, вообще-то) ... Имо, скорее, исключение составляют ситуации, в которых next-logical-lineожидаемое поведение, и в этих ситуациях я часто склонен visual-line-modeвообще отключать . И +1 @itsjeyd, очень приятно иметь возможность получить любое поведение в зависимости от ситуации.
Т. Веррон
2
@ Т. Веррон Достаточно справедливо. Я думаю, я всегда могу вернуться C-nк next-logical-line. ;)
Себастьян Ле Каллоннек
0

C-aи C-eоба принимают префиксный аргумент, который позволяет пропускать строки. Например, C-2 C-aперейдет к началу следующей строки и C-2 C-eперейдет к концу следующей строки. Аргумент префикса из 3 перемещает две строки и так далее. Вы также можете использовать отрицательные аргументы, чтобы перейти к предыдущим строкам.

Ясно, что они не очень полезны, когда вам нужно, чтобы курсор оставался в том же столбце, но я нахожу, что большинство моих макросов в любом случае включают переход к началу или концу строки, поэтому они очень удобны.

Алан Третий
источник