Редагування програм – ЧАСТИНА 2

Щоб встановити область навколо наступного s-вирази в буфері, використовуйте CM-@ (mark-sexp), яка ставить позначку в той же самий місце, куди повинна б була пересунутися CMf C-M-@ сприймає аргумент так само, як C-M-f Зокрема, негативний аргумент зручний для установки мітки на початку попереднього s-вирази

Розуміння синтаксису командами для списків і s-виразів повністю управляється синтаксичної таблицею Будь-який знак може бути оголошений, наприклад, що відкриває обмежувачем і діяти як відкриває кругла дужка Див Розділ 316 [Синтаксис], с 366

224  Визначення функцій

У Emacs, укладені в дужки групи на верхньому рівні в буфері називаються визначеннями функцій Ця назва походить від того факту, що більшість списків верхнього рівня в Лісп-файлі – це екземпляри спеціальної форми defun, але будь-яка група верхнього рівня, укладена в дужки, мовою Emacs розуміється як визначення функції, незалежно від її змісту і від мови програмування Наприклад, тіло функції в Сі – це визначення функції

CMa пересунути на початок поточного або попереднього визначення функції

(beginning-of-defun)

CMe пересунути в кінець поточного або наступного визначення функції (endof-defun)

CMh Помітити область навколо всього поточного або наступного визначення функції

(mark-defun)

Команди руху до початку або кінця поточного визначення функції – це CMa

(Beginning-of-defun) і C-M-e (end-of-defun)

Якщо ви побажаєте зробити якісь дії над поточним визначенням функції, використовуйте CMh (mark-defun), яка ставить крапку на початку і мітку в кінці поточного або наступного визначення функції Наприклад, це найпростіший спосіб отримати готове для переміщення в інше місце визначення функції У режимі С, CMh запускає функцію c-mark-function, яка майже еквівалентна mark-defun відмінність полягає в тому, що вона переходить через оголошення аргументів, імя функції і тип повертаються даних, так що функція Сі опиняється всередині області повністю Див Розділ 84 [Позначка обєктів], с 65

Emacs припускає, що будь-які відкривають дужки, знайдені в самому лівому стовпчику, – це початок визначення функції Тому ніколи не ставте відкривають дужки з лівого краю в Ліспфайлі, якщо вони не є початком списку верхнього рівня Ніколи не ставте відкриває фігурну дужку або інший відкриває обмежувач на початку рядка в програмі на Сі, якщо тільки вони не починають тіло функції Більшість можливих проблем виникає, коли ви хочете поставити відкриває обмежувач на початку рядка всередині строкової константи Щоб уникнути неприємностей, поставте екрануючий знак (\ в Сі і Emacs Lisp, / в деяких інших діалектах Лиспа) перед відкриває обмежувачем Це не вплине на вміст рядка

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

225  Відступи в програмах

Найкращий спосіб зберегти правильність відступів у програмі – це використовувати Emacs для створення нових відступів у міру внесення змін У Emacs є команди для створення правильного відступу одиночній рядка, заданого числа рядків або всіх рядків усередині однієї групи, укладеної в дужки

Emacs також надає програму структурної друку для Лиспа, реалізовану в бібліотеці pp Ця програма переформатує лісповскій обєкт, вибираючи відступи таким чином, щоб результат добре виглядав і зручно читався

2251  Основні команди для відступів в програмах

hTABi              Встановити відступ поточного рядка

Cj Еквівалент hRETi, За яким слід hTAB(newline-and-indent)

Основна команда відступу – це hTABi, Яка дає поточному рядку правильний відступ, грунтуючись на відступі попередніх рядків Функція, яку запускає hTABi, Залежить від основного режиму в режимі Lisp це lisp-indent-line, в режимі С це cindent-line і так далі Ці функції розуміють різні синтаксиси різних мов, але всі вони роблять приблизно одне й те ж hTABв основному режимі будь-якої мови програмування вставляє або видаляє пробільні знаки на початку поточного рядка, незалежно від того, де в рядку розташовується точка Якщо точка знаходиться серед пробільних знаків на початку рядка, hTABi  залишає її після них в іншому випадку hTABi  залишає точку фіксованою по відношенню до оточуючих її знакам

Щоб вставити в точці знак табуляції, використовуйте Cq hTABi

При введенні нового коду використовуйте Cj (newline-and-indent), яка еквівалентна hRETi, За якою слід hTABi Cj створює порожній рядок, а потім дає їй відповідний відступ

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

Памятайте, що відкривають круглі та фігурні дужки або інші відкривають обмежувачі на лівому краї розглядаються Emacs (і правилами відступу) як початок функції Тому ви ніколи не повинні ставити відкриває обмежувач, який не є початком функції, в нульовому стовпці, навіть усередині строкової константи Це обмеження життєво важливо для швидкості роботи команд відступу ви повинні просто прийняти його Для більш детальної інформації про це дивіться Розділ 224 [Визначення функцій], с 208

2252  Відступ в декількох рядках

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

CMq Зробити новий відступ у всіх рядках в межах одного списку (indent-sexp)

C-u hTABi     Зрушити весь список жорстко убік так, щоб його перший рядок отримала належний відступ

CM-\ Зробити новий відступ у всіх рядках в області (indent-region)

Ви можете знову зробити відступ вмісту одиночного списку, перемістивши точку в його початок і набравши CMq (це команда indent-sexp в режимі Lisp, c-indent-exp в режимі С вона також привязана до іншим відповідним функціям в інших режимах) Відступ рядки, на якій починається це s-вираз, не змінюється тому змінюється тільки відносний відступ в межах переліку, а не його позиція Щоб виправити також і його позицію, наберіть hTABперед C-M-q

Якщо відносний відступ всередині списку правильний, але відступ його першого рядка

– Ні, перейдіть до цього рядка і наберіть Cu hTABi hTABз числовим аргументом робить в поточному рядку звичайний відступ, а потім змінює відступ у всіх рядках в групі, починаючи з поточної, на ту ж саму величину Іншими словами, вона оновлює відступ цілої

групи як неподільної одиниці Це розумно, хоча і не змінює рядки, які починаються всередині строкових констант, або рядки препроцесора Сі, коли це відбувається в режимі С

Можна вказати діапазон рядків, в яких слід знову зробити відступ, іншим способом – за допомогою області Команда CM-\ (indent-region) застосовує hTABi  до кожного рядка, чий перший знак знаходиться між точкою і влучною

2253  Налаштування відступів для Лиспа

Зразок відступу для лісповского вираження може залежати від функції, спричиненої цим виразом Для кожної лісповской функції ви можете вибирати серед декількох наперед зразків відступу або визначити довільний відступ за допомогою програми на Ліспі

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

Якщо змінна lisp-indent-offset не дорівнює nil, то вона перекриває звичайний шаблон відступу для другого рядка вираження, так що такі рядки завжди зсуваються вправо на lisp-indent-offset стовпців далі, ніж містить їх список

Стандартний шаблон перекривається в деяких певних функціях Для функцій, чиї імена починаються з def, відступ другого рядка завжди робиться на lisp-bodyindention додаткових стовпців далі відкриває дужки, починаючої вираз

Стандартний шаблон може перекриватися різними способами для окремих функцій відповідно до властивості імені цієї функції lisp-indent-function Є чотири варіанти для цієї властивості:

nil Це те ж саме, що і відсутність властивості використовується стандартний шаблон відступу

defun Шаблон, використовуваний для імен функцій, які починаються з def, також використовується і для цієї функції

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

*

*