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


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

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


Ідеально! Дякую. Цікаво, у якій ситуації ти б next-linenext-logical-line
віддаєш

@ SébastienLeCallonnec Я думаю, що у всьому є випадок використання ... і добре знати, що Emacs обробляє їх усі;)
itsjeyd

1
@ SébastienLeCallonnec Erm ... під час написання натуральною мовою? У нелінійній ситуації натискання <down>або, C-nяк правило, очікує, що ви змусите вас пройти одну лінію вниз, а не стрибати через межу лінії. Подумайте, що не кожен користувач походить із блокнота (там, де взагалі немає переносу рядків). Імо, виняток - це скоріше ситуації, коли next-logical-lineочікувана поведінка, і в таких ситуаціях я часто схильний visual-line-modeвзагалі відключати . І +1 @itsjeyd, це дуже приємно мати можливість отримати будь-яку поведінку залежно від ситуації.
Т. Веррон

2
@ T.Verron Справедливо. Я припускаю , що я завжди можу перепрівязиваю C-nдо next-logical-line. ;)
Себастьян Ле Каллонек

0

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

Зрозуміло, що вони не надто корисні, коли курсору потрібно перебувати в одному стовпчику, але я вважаю, що більшість моїх макросів так чи інакше стосуються початку або кінця рядка, тому вони дуже зручні.

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