Основні команди редагування – ЧАСТИНА 4

Мінібуфер використовує простір екрану, відведене під луна-область, але це може суперечити іншим способам використання луна-області в Emacs Emacs обробляє такі конфлікти таким чином:

Якщо якась команда отримує помилку, поки ви знаходитесь в мінібуфер, то це не скасовує мінібуфер Однак, луна-область потрібна для повідомлення про помилку, і тому сам мінібуфер ховається на час Він повертається через кілька секунд або відразу ж, як тільки ви наберете небудь

Якщо в мінібуфер ви використовуєте команду, чиєю метою є друк повідомлення в луна-області, таку як Cx =, то повідомлення відображається як зазвичай, а мінібуфер ховається на час Він повертається через кілька секунд, або як тільки ви наберете щось ще

Коли використовується мінібуфер, луна набираються знаків не проводиться

51  Мінібуфер для імен файлів

Іноді мінібуфер зявляється вже з текстом Наприклад, коли вам пропонується задати імя файлу, мінібуфер зявляється з містяться в ньому каталогом, заданих за замовчуванням, який закінчується косою рисою Це робиться, щоб проінформувати вас про те, в якому каталозі буде знаходитися файл, якщо ви не задасте каталог Наприклад, мінібуфер може починатися так:

Find  File: /u2/emacs/src/

де Find File: служить підказкою Надрукувавши bufferc, ви задаєте файл з імям / u2/emacs/bufferc. Щоб знайти файли в сусідніх каталогах, використовується .; таким чином, якщо ви наберете . / lisp / simpleel, то отримаєте файл

‘/ U2/emacs/lisp/simpleel. Або ви можете знищити непотрібне вам імя каталогу за допомогою M-hDEL(Див Розділ 211 [Слова], с 181)

Якщо вам не потрібно нічого з каталогу за замовчуванням, ви можете знищити його за допомогою Ca Ck Але в цьому немає необхідності ви можете просто проігнорувати його Вставте після каталогу за замовчуванням абсолютне імя файлу, що починається з косою риси чи тильди Наприклад, щоб задати файл / etc / termcap, просто вставте це імя, при цьому ви отримаєте в мінібуфер такий рядок:

Find  File: /u2/emacs/src//etc/termcap

GNU Emacs надає подвійною косою межах особливе призначення (зазвичай немає сенсу писати дві косі риси поспіль): вони означають пропустити все перед другим косою межею в парі. Таким чином, / u2/emacs/src / в попередньому прикладі буде проігноровано, і ви отримаєте файл / etc / termcap.

Якщо ви встановите insert-default-directory рівний nil, каталог за замовчуванням не зявляється в мінібуфер Таким чином, мінібуфер зявляється порожнім Але що набирається вами імя, якщо воно відносно, як і раніше інтерпретується з урахуванням того ж каталогу за замовчуванням

52  Редагування в мінібуфер

Мінібуфер – це буфер Emacs (хоча і своєрідний), і звичайні команди Emacs

годяться для редагування тексту вводяться вами аргументів

Так як hRETi  в мінібуфер визначений для виходу, ви не можете використовувати його для вставки обмежувача нового рядка в мінібуфер Щоб вставити переклад рядка, введіть Co або Cq Cj (Нагадаємо, що обмежувач нового рядка – це насправді знак control-J)

Мінібуфер має своє власне вікно, яке завжди присутнє на екрані, але діє так, як якщо б його не було, коли мінібуфер не використовується Коли ж мінібуфер використовується, його нічим не відрізняється від всіх інших вікон ви можете перейти в інше вікно за допомогою Cx o, відредагувати текст в інших вікнах і може бути навіть звернутися до декількох файлів перед поверненням в мінібуфер для представлення аргументу Ви можете знищити текст в іншому вікні, повернутися у вікно мінібуфера і потім відновити цей текст, щоб використовувати його в аргументі Див Глава 16 [Вікна], с 141

Однак існують деякі обмеження на використання вікна мінібуфера Ви не можете перемкнути в ньому буфери – мінібуфер і його вікно повязані разом Точно також, ви не можете поділити або знищити вікно мінібуфера Але ви можете зробити його вище звичайним способом за допомогою Cx ^ Якщо ви включите режим Resize-Minibuffer, то вікно мінібуфера по необхідності збільшується вертикально, щоб вмістити текст, який ви помістили в мінібуфер Використовуйте Mx resize-minibuffer-mode, щоб включити або виключити цей другорядний режим (див Розділ 311 [Другорядні режими], с 341)

Прокрутка працює у вікні мінібуфера особливим чином Коли висота мінібуфера дорівнює тільки одному рядку, і він містить довгий рядок тексту, що не вмістилася б не екрані, за допомогою прокрутки автоматично підтримується перекриття однієї рядки продовження другий на певне число знаків Мінлива minibufferscroll-overlap вказує число знаків, на яке потрібно робити перекриття по замовчуванням це 20

Якщо під час перебування у мінібуфер ви запускаєте команду, яка показує в іншому вікні довідковий текст будь-якого виду, ви можете використовувати в мінібуфер команду CMv для прокрутки цього вікна Ця властивість вступає в дію, якщо спроба отримати завершення в мінібуфер дає вам список можливих варіантів Див Розділ 163 [Інші вікна], с 142

Emacs зазвичай забороняє більшість команд, що використовують мінібуфер, коли мінібуфер активний Це правило було введено, щоб рекурсивні мінібуфер НЕ заплутували початківців користувачів Якщо ви хочете отримати можливість використання таких команд в мінібуфер, встановіть змінну enable-recursive-minibuffers не рівної nil

53  Завершення

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

Коли завершення доступно, певні клавіші – hTABi, hRETі hSPC– Перепрівязиваются для доповнення представленого в мінібуфер тексту до більш довгого рядка, яку цей текст являє, шляхом зіставлення його з варіантами завершення, які надаються командою, що зчитує цей аргумент Знак визначений як показує список можливих завершень того, що ви вже ввели

Наприклад, коли Mx використовує мінібуфер для читання імені команди, вона надає для завершення список всіх наявних імен команд Emacs Клавіші завершення зіставляють текст в мінібуфер з усіма іменами команд, знаходять якісь додаткові знаки імені, які маються на увазі вже представленими в мінібуфер, і додають ці знаки до тих, які ви дали Тому можна надрукувати Mx inshSPCb hRETзамість M-x insert-buffer hRET(Наприклад)

Регістр зазвичай має значення при завершенні, так як він має значення в більшості імен, які ви можете завершити (імена буферів, файлів, команд) Таким чином, fo не закінчиться до Foo. Коли ви завершуєте імя, в якому регістр не має значення, то при завершенні регістр може бути проігноровано

531  Приклад завершення

Тут може допомогти конкретний приклад Якщо ви наберете M-x au hTABi,  hTABi  шукає варіанти (у даному випадку імена команд), які починаються з au. Їх декілька, включаючи auto-fill-mode і auto-save-mode, але всі вони однаково починаються на auto-, тому au в мінібуфер змінюється на auto-.

Якщо ви негайно знову наберетеhTABi, То зявляться кілька можливостей для наступних знаків – це може бути будь-який з cfilrs, – тому більше нічого не додається, але в іншому вікні показується список всіх можливих завершень

Якщо ви продовжуєте набирати f hTABi, То цей hTABi  побачить auto-f. Єдине імя команди, яке так починається, – це auto-fill-mode, таким чином завершення вставляє її залишок Тепер ви маєте на мінібуфер auto-fill-mode просто після набору au hTABf hTABi Зауважте, щоhTABi  володіє в мінібуфер такою дією, тому що коли можливе завершення, він привязаний до команди minibuffer-complete

532  Команди завершення

Тут представлений список всіх команд завершення, визначених у мінібуфер, коли завершення доступно

hTABi              Завершити представлений в мінібуфер текст наскільки це можливо

(minibuffer-complete)

hSPCi              Завершити текст в мінібуфер, але не додавати більше одного слова

(minibuffer-complete-word)

hRETi             Уявити текст в мінібуфер як аргумент, можливо спочатку доповнюючи його, як описано нижче (minibuffer-complete-and-exit)

? Надрукувати список всіх можливих завершень тексту в мінібуфер

(minibuffer-list-completions)

hSPCi  завершує дуже схоже на hTABi, Але ніколи не йде далі наступного Дефі-

са або пробілу Якщо в мінібуфер є auto-f, і ви наберете hSPCi, Він виявить,

що завершення – це auto-fill-mode, але зупинить завершення після fill-. Це дасть

‘Auto-fill-. Ще один hSPCв цьому місці завершує повністю до auto-fill-mode. hSPCв мінібуфер, коли можливе завершення, запускає функцію minibuffer-completeword

Ось кілька команд, які ви можете використовувати для вибору завершення у вікні,

показуючому перелік варіантів:

Mouse-2 Клацання другою кнопкою миші вибирає одне з завершень з переліку можливих варіантів (mouse-choose-completion) Зазвичай ви використовуєте цю команду, коли точка знаходиться в мінібуфер але ви повинні клацнути в переліку завершень, а не самому мінібуфер

hPRIORi

M-v Натискання hPRIORi  (Або hPAGEUPi) Або Mv, коли ви знаходитесь в мінібуфер, вибирає вікно, що показує буфер з переліком завершень (switch-to completions) Це прокладає шлях до використання команд, перерахованих нижче (Вибір це вікна звичайним способом має той же ефект, але цей спосіб зручніше)

hRETi             Натискання hRETв буфері з переліком завершень вибирає завершення, на якому або після якого знаходиться точка (choose-completion) Щоб використовувати цю команду, ви повинні спочатку переключитися в вікно, що показує перелік завершень

hRIGHTi         Натискання правої курсорною стрілки hRIGHTi  в буфері з переліком завершень

пересуває точку до наступного завершення (next-completion)

hLEFTi            Натискання лівої курсорною стрілки hLEFTв буфері з переліком завершень пересуває точку ближче до початку буфера, до попереднього завершення (previouscompletion)

533  Суворе завершення

Існує три різних варіанти роботи hRETi  при завершенні в мінібуфер, за-

висять від того, як буде використаний аргумент

Суворе завершення використовується, коли безглуздо давати небудь інший аргумент, крім однієї з відомих альтернатив Наприклад, коли Cx k зчитує імя буфера для знищення, то безглуздо давати що або, крім імені існуючого буфера При строгому завершенні hRETвідмовляється виходити, якщо текст в мінібуфер не закінчується з точною відповідністю шаблоном

Обережне завершення подібно строгому завершенню за винятком того, що hRETвиходить, тільки якщо текст уже збігався в точності з шаблоном, що не потребує в завершенні Якщо текст – не точне збіг, hRETi  не виходить, але робить завершення тексту Якщо це завершує текст до точного збігу, то другий hRETвийде

Обережне завершення використовується для читання імен файлів, які повинні вже існувати

Вільне завершення використовується, коли будь-який рядок є підходящою, і список альтернатив завершення дається просто для довідки Наприклад, коли Cx Cf зчитує імя файлу для звернення, допустимо будь-яке імя файлу, на випадок, якщо ви захочете створити новий файл При вільному завершенні hRETi  бере текст в мінібуфер точно як він даний, не закінчуючи його

Команди завершення показують у вікні список всіх можливих варіантів всякий раз, коли можливо більш ніж одне завершення для наступного знака Крім того, набір явно запрошувати такий список Якщо перелік завершень довгий, ви можете прокрутити його за допомогою CMv (див Розділ 163 [Інші вікна], с 142)

534  Параметри завершення

При завершенні імен файлів певні імена зазвичай ігноруються Мінлива completion-ignored-extension містить список рядків файл, чиє імя закінчується на будь-яку з цих рядків, ігнорується як можливе завершення Стандартне значення цієї змінної має кілька елементів, включаючи . О, . Elc, . Dvi і ~. Дія таке: наприклад, foo може завершитися до fooc, навіть якщо fooo також існує Однак, якщо всі можливі завершення кінчаються на ігноровані рядки, тоді вони не ігноруються Ігноровані розширення не відносяться до списків завершень – Ці списки завжди згадують всі можливі завершення

Зазвичай команда завершення, яка виявляє, що наступний знак не можна визначити, автоматично показує список всіх можливих завершень Якщо змінна completion-auto-help встановлена ​​в значення nil, цього не відбувається, і щоб переглянути можливі варіанти, ви повинні набрати.

Бібліотека complete реалізовує більш потужний вид завершення, який може доповнювати кілька слів одночасно Наприклад, вона може завершити скорочення імені команди pb до print-buffer, тому що жодна інша команда не починається з двох слів, чиї перші букви – це p і b. Щоб використовувати цю бібліотеку, напишіть (load complete) у вашому файлі ~ / Emacs (див Розділ 317 [Файл ініціалізації], с 366)

Режим Icomplete надає постійно оновлювану інформацію, яка говорить вам, які завершено доступні для вже введеного тексту Цей другорядний режим включається і вимикається за допомогою команди M-x icomplete-mode

54  Історія мінібуфера

Всі введені вами в мінібуфер аргументи зберігаються в списку історії мінібуфера, щоб ви могли знову використовувати їх пізніше в новому аргументі Текст старих аргументів вставляється в мінібуфер особливими командами Вони скидають старе вміст мінібуфера, так що ви можете думати про них як про команди руху за списком попередніх аргументів

hUPi

Mp Переміщується до попереднього рядка аргументу, збереженою в історії міні-

буфера (previous-history-element)

hDOWNi

Mn Переміщується до наступного рядка аргументу, збереженою в історії МІНІБ-

фера (next-history-element)

M-r regexp hRETi

Переміщається до більш раннього аргументу в історії мінібуфера, в якому є збіг з regexp (previous-matching-history-element)

M-s regexp hRETi

Переміщається до пізнішого аргументу в історії мінібуфера, в якому є збіг з regexp (next-matching-history-element)

Найпростіший спосіб повторно використовувати збережені аргументи зі списку історії

– Пересуватися по списку історії по одному аргументу Перебуваючи в мінібуфер, використовуйте Mp або стрілку вгору (previous-history-element) щоб перейти до попереднього введенню мінібуфера, і Mn або стрілку вниз (next-history-element) для переходу до наступного

Попередній введення, який ви витягаєте з історії, повністю заміщає місти-

моє мінібуфера Щоб використовувати його як аргумент, вийдіть з мінібуфера

як звичайно, за допомогою hRETi Ви також можете відредагувати текст перед використанням це не змінює елемент історії, до якого ви перейшли, але ваш новий аргумент вставляється в кінець списку історії як окремий елемент

Для багатьох аргументів мінібуфера є значення за замовчуванням. У деяких випадках команди історії знають значення за замовчуванням Тоді ви можете вставити це значення в мінібуфер у вигляді тексту, використовуючи Mn для переходу в майбутнє з історії Ми сподіваємося зрештою зробити це властивість доступним завжди, коли у мінібуфера є значення за замовчуванням

Також є команди для пошуку вперед або назад по історії вони проводять пошук елементів історії, які відповідають задаваемому вами в мінібуфер регулярному виразу M-r (previous-matching-history-element) здійснює пошук більш старих елементів історії, тоді як Ms (next-matching-history-element) виробляє пошук більш нових елементів За особливим дозволом ці команди можуть використовувати мінібуфер для зчитування аргументів, хоча ви вже знаходитеся в мінібуфер, коли запускаєте їх Як і при нарощуються пошуку, заголовна буква в регулярному виразі робить пошук від регістру (див Розділ 126 [Пошук і регістр], с 95)

Кожне використання мінібуфера записує ваш введення в список історії, але є окремі списки для різних видів аргументів Наприклад, є список для імен файлів, використовуваний усіма командами, зчитувальними імена файлів (У нього є особливість: цей список історії записує абсолютне імя файлу, не більше і не менше, навіть якщо ви ввели його інакше)

Існують кілька інших особливих списків історії, включаючи список для імен команд, зчитувальних командою Mx, список для імен буферів, список для аргументів команд начебто query-replace і список команд компіляції, зчитувальних командою compile І нарешті, є список історії для різного, який використовують більшість аргументів мінібуфера

Мінлива history-length задає максимальну довжину списку історії мінібуфера як тільки список доростає до цієї довжини, найстаріший елемент видаляється при додаванні нового Якщо значення history-length одно t, то обмеження на довжину немає, і елементи не видаляються ніколи

55  Повтор команд мінібуфера

Кожна команда, яка використовує мінібуфер принаймні один раз, записується в спеціальний список історії разом зі значенням аргументів мінібуфера, так що ви можете легко її повторити Зокрема, записується кожне використання Mx, так як Mx використовує мінібуфер для читання імені команди

C-x hESCi hESCi

Повторне виконання останньої команди мінібуфера (repeat-complexcommand)

M-x list-command-history

Вивести повну історію всіх команд, які може повторити Cx hESCi hESCi, Починаючи з більш нових

C-x hESCi hESCi  використовується для повторного виконання недавньої команди, яка використала мінібуфер Запущена без аргументу, вона повторює останню таку команду Числовий аргумент визначає, яку команду повторити одиниця означає першу від кінця, а великі числа визначають більш ранні команди

C-x hESCi hESCi  діє за допомогою перетворення попередньої команди у вираз Лиспа і подальшого входу в мінібуфер, ініціалізірований текстом цього виразу Якщо ви набираєте просто hRETi, То команда повторюється як раніше Ви можете також

змінити команду шляхом редагування лісповского вираження Те вираз, що ви врешті-решт представите, і буде виконано Повторена команда додається в початок історії команд, якщо вона не ідентична самої останньої виконаної команді, яка вже була там

Навіть якщо ви не розумієте синтаксису Лиспа, найімовірніше буде очевидно, яка команда відбивається для повторення Якщо ви не міняли текст, ви можете бути впевнені, що він повториться точно так, як раніше

Перебуваючи в мінібуфер по команді Cx hESCi hESCi, Ви можете використовувати команди історії мінібуфера (Mp, Mn, Mr, Ms див Розділ 54 [Історія мінібуфера], с 49) для просування по списку збережених повністю команд Після того, як ви знайдете бажану попередню команду, ви можете як зазвичай відредагувати її вираження і потім надати його знову, набравши hRETi

Перелік попередніх команд, які використовували мінібуфер, зберігається як лісповскій список у змінній command-history Кожен елемент – це лісповское вираз, який описує одну команду і її аргументи Програми на Ліспі можуть повторно виконувати команди шляхом передачі в eval відповідного елемента command-history

Джерело: Річард Столмен, Керівництво по GNU Emacs

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*