Різноманітні команди – ЧАСТИНА 2

Emacs не чекає, поки подоболочка небудь зробить Можна перемикати вікна або буфери і редагувати їх, поки оболонка очікує, або поки вона виконує команду Висновок з подоболочки чекає доти, поки у Emacs чи не зявиться час на його обробку прийом відбувається всякий раз, коли Emacs очікує введення з клавіатури, а також коли є вільний час

Як імя файлу для завантаження подоболочки використовується значення змінної explicit-shell-file-name, якщо воно не nil В іншому випадку, використовується змінна середовища ESHELL якщо вона встановлена, або SHELL Якщо вказане імя файлу є відносним, проглядаються каталоги в списку exec-path цей инициализируется по змінній середовища PATH під час запуску Emacs Ваш файл . Emacs може перекрити одну або обидві з цих ініціалізацій

Щоб вказати для оболонки систему кодування, ви можете використовувати команду Cx hRETc безпосередньо перед Mx shell Ви також можете задати систему кодування після запуску оболонки за допомогою команди Cx hRETp в її буфері Див Розділ 189 [Завдання кодування], с 168

Як тільки оболонка запущена, на вхід їй подається вміст файлу ~ / Emacs_імяоболочкі, якщо цей файл існує, де імяоболонки є імям файлу, з якого завантажується оболонка Наприклад, якщо ви використовуєте bash, то їй надсилається файл

‘~/emacs_bash’

Команди cd, pushd і popd, передані підпорядкованої оболонці, відстежуються в Emacs так, щоб каталог за замовчуванням буфера * shell * завжди збігався з робочим каталогом оболонки Ці команди розпізнаються синтаксично перевіркою посилаються рядків вводу Якщо ви використовуєте для цих команд псевдоніми, то ви можете вказати Emacs, що їх теж слід розпізнавати Наприклад, якщо значення змінної shell-pushdregexp відповідає початку командного рядка оболонки, то цей рядок сприймається як команда pushd Якщо для pushd використовуються псевдоніми, то необхідно змінити цю змінну Аналогічно, shell-popd-regexp і shell-cd-regexp використовуються для розпізнавання команд, що позначають popd і cd. Причому ці команди розпізнаються тільки на початку командного рядка оболонки

Якщо Emacs отримує помилку при спробі обробити те, що він вважає командами cd, pushd або popd, він запускає пастку shell-set-directory-error-hook (див Розділ 3123 [Пастки], с 349)

Якщо Emacs не відслідковує правильно зміни поточного каталогу подоболочки, ис-

товуйте команду Mx dirs, щоб запитати оболонку, який у неї поточний каталог Ця

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

Ви також можете використовувати Mx dirtrack-mode, щоб включити (або вимкнути)

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

Emacs визначає в підоболонці змінну середовища EMACS зі значенням t Сценарій оболонки може перевірити цю змінну, щоб визначити, чи запущений він з подоболочки Emacs

3023  Режим Shell

Буфери оболонки використовує режим Shell, в якому визначено декілька спеціальних ключів, привязаних до префікса Cc Вони вибрані так, що імітують звичайні клавіші редагування і управління завданнями, присутні в оболонках поза Emacs, з тією лише різницею, що спочатку ви повинні набрати Cc Нижче наведено повний список таких ключів режиму Shell

hRETi             Наприкінці буфера, посилає рядок в якості введення в іншому випадку копіює поточний рядок в кінець буфера і посилає її (send-shell-input) При копіюванні рядки будь-який текст на її початку, відповідний змінної shell-prompt-pattern, пропускається значення цієї змінної має бути регулярним виразом, який відповідає підказкам, використовуваним у вашій оболонці

hTABi              Завершує імя команди або файлу перед точкою в буфері оболонки (comintdynamic-complete)hTABi  також завершує посилання на історію (див Розділ 30243 [Посилання на історію], с 328) і імена змінних середовища

Мінлива shell-completion-fignore задає список розширень файлів, які повинні ігноруватися при завершенні в режимі Shell Установка за замовчуванням ігнорує імена файлів, що закінчуються на ~, # Або

‘%. Інші споріднені з Comint режими використовують змінну comintcompletion-fignore

M- Тимчасово показує список можливих завершень імені файлу перед точкою в буфері оболонки (comint-dynamic-list-filename-completions)

Cd Або видаляє один знак, або посилає eof (comint-delchar-or-maybe-eof)

Набраний наприкінці буфера оболонки, Cd посилає підоболонці eof Набраний-

ний в будь-який інший позиції в цьому буфері, Cd видаляє один знак, як звичайно

Cc Ca Переміщає на початок рядка, але після підказки, якщо вона є (comint-bol)

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

– Але після C-c hSPCмітка процесу може виявитися на попередньому рядку)

C-c hSPCi      Накопичує кілька рядків введення, і потім посилає їх разом Ця команда вставляє перед точкою переклад рядка, але не посилає попередній текст на вхід подоболочки – принаймні не зараз Обидві рядка, і та, що перед переведенням рядка, і та, що після, будуть послані разом (і з розділяє їх переведенням рядка), коли ви натиснете hRETi

Cc Cu Знищує весь текст, який ще не був посланий в якості введення (comintkill-input)

Cc Cw Знищує слово перед точкою (backward-kill-word)

Cc Cc Перериває оболонку або її поточне підзавдань, якщо воно існує (comintinterrupt-subjob) Ця команда знищує також весь призначений для введення текст, який ще не був посланий

Cc Cz Зупиняє оболонку або її поточне підзавдань, якщо воно існує (comint-stop-subjob) Ця команда знищує також весь текст, який ще не був посланий в якості вводу

Cc C-\ Посилає сигнал виходу оболонці або її поточним підзавдань, якщо воно існує (comint-quit-subjob) Ця команда знищує також весь призначений для введення текст, який ще не був посланий

Cc Co Знищує останню порцію висновку від команди оболонки (comint-killoutput) Це корисно, якщо команда оболонки вивергає багато тексту, який тільки заважає

C-c C-r

CMl Прокручує вікно так, щоб початок останньої порції виведення виявилося ВВЕР-

ху також переміщує туди курсор (comint-show-output)

Cc Ce Прокручує вікно, щоб початок останньої порції виведення виявилося внизу

(comint-show-maximum-output)

Cc Cf Переміщає вперед на одну команду оболонки, але в межах поточного рядка (shell-forward-command) Мінлива shell-command-regexp вказує, як розпізнати кінець команди

Cc Cb Переміщає тому на одну команду оболонки, але в межах поточного рядка

(shell-backward-command)

Cc Cl Показує історію команд оболонки цього буфера в іншому вікні (comintdynamic-list-input-ring)

Mx dirs Запитує оболонку про поточний каталозі, щоб Emacs скоординована з оболонкою

M-x send-invisible hRETтекст hRETi

Зчитує текст і посилає його на вхід оболонки без луна Це корисно, коли команда оболонки запускає програму, запитуйте пароль

Або ви можете повідомити Emacs, як розпізнавати запити пароля і вимкнення-

чать для них луна:

(add-hook  ’comint-output-filter-functions

’comint-watch-for-password-prompt)

M-x comint-continue-subjob

Відновлює процес оболонки Це корисно, якщо ви ненароком призупинили процес оболочкі1

M-x comint-strip-ctrl-m

Прибирає всі знаки control-M з поточної порції виведення оболонки Найбільш зручний спосіб використовувати цю команду – запускати її автоматично, коли ви отримуєте висновок від подоболочки Щоб зробити так, обчисліть наступне лісповское вираз:

(add-hook  ’comint-output-filter-functions

’comint-strip-ctrl-m)

M-x comint-truncate-buffer

Ця команда усікає буфер оболонки до певного максимального числа рядків, що задається змінною comint-buffer-maximum-size Це можна зробити автоматично кожного разу при отриманні висновку від подоболочки таким способом:

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

(add-hook  ’comint-output-filter-functions

’comint-truncate-buffer)

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

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

Інші засоби Emacs, що використовують варіанти режиму Comint, включають GUD (див Розділ 235 [Відладчики], с 249) і Mx run-lisp (див Розділ 2310 [Запуск зовнішнього Лиспа], с 256)

Ви можете використовувати Mx comint-run для виконання будь-якої програми по вашим вибором в незміненому режимі Comint – без особливостей режиму Shell

3024  Історія команд оболонки

Буфери оболонки підтримують три способи повторення більш ранніх команд Ви можете використовувати ті ж ключі, що використовуються в мінібуфер вони працюють в чому так само, як в мінібуфер, вставляючи текст попередніх команд, завжди залишаючи крапку в кінці буфера Ви можете переміститися по буферу назад до попередніх командам в їх початковій позиції і потім знову послати їх або скопіювати в кінець Або ви можете використовувати знак !’ для посилань на старі команди

30241  Список історії оболонки

Mp Витягує наступну більш стару команду оболонки

Mn Витягує наступну більш нову команду оболонки

M-r regexp hRETi

M-s regexp hRETi

Виробляє пошук команди оболонки, відповідної регулярному висловлю-

нию regexp, Вперед або назад

C-c C-x (режим Shell)

Витягує наступну команду в списку історії

Джерело: Річард Столмен, Керівництво по 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>

*

*