Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Куличкин

 

Зачем нужно об этом писать, когда есть документация на lilypond.org и даже специальный раздел на forumklassika, где Вас совершенно бесплатно проконсультируют? Мой ответ будет предельно прост. Я пишу, в первую очередь, для музыкантов. А среди них есть такие, которые не только никогда в жизни не занимались программированием, но и компьютер включают не особо часто. Моя задача состоит в том, чтобы после чтения этого текста каждый из них при желании смог САМОСТОЯТЕЛЬНО разобраться в документации Лилипонда... даже не зная английского языка, на котором она написана!

 

Теперь небольшой абзац для поклонников программ Finale и Sibelius. Те, кого интересует исключительно LilyPond, полагаю могут безо всякого ущерба его пропустить.

 

Я с большим уважением отношусь как к Finale, так и к Sibelius. В 2003 году в Финале я набрал около 500 страниц современной оперной партитуры («Хаджи-Мурат» Ш. Чалаева). Позднее в Сибелиусе я набрал три из четырех частей 2-го струнного квартета А. Шёнбега (четвертую часть я полностью еще не набрал, т.к. набираю сейчас в том же Сибелиусе). У каждого из них есть свои достоинства. В Финале, в частности, есть богатая система горячих клавиш, позвляющая быстро добраться до нужной опции. В Сибелиусе есть Keypad — очень тонкое изобретение, позволяющее легко добираться до наиболее часто используемых функций, используя самую правую часть компьютерной клавиатуры. Создатели этих программ недооценили лишь один малозаметных, но весьма важный нюанс. Компьютерная клавиатура рассчитана не на ноты, а на текст. А мышь, на сегодняшний день, почти неудовлетворительный инструмент для рисования. Такая малозаметная, на первый взгляд, деталь колоссально обесценивает графический интерфейс как Finale, так и Sibelius. Если Вы не профессиональный художник или дизайнер, а человек с корявыми руками (как я) или с пальцами, оптимизированными под фортепианную клавиатуру, Вы, конечно, знаете, насколько трудно бывает передвинуть куда надо лигу, значок крещендо или диминуэндо и т.п. Если у Вас особо тяжелый случай (как у меня), то даже набор нот мышкой превращаетсяв сплошную пытку, настолько часто Вы промахиваетесь мышкой между линейками. Я уже не говорю про то, что MIDI-клавиатура сама решает, до-диез она играет или ре-бемоль. Ее можно запрограммировать для простых случаев, но универсального алгоритма здесь нет. Почему? Здесь тоже не учтено, что музыка издавна пишется вовсе не на секвенсере через миди-клавиатуру и 16 каналов. Между музыкой записанной и музыкой исполненной есть большая разница. А нотный редактор нужен для фиксации музыки ЗАПИСАННОЙ. Поэтому в результате всех этих несовершенств скорость набора нот существенно падает. Это, правда, заметно лишь на крупных сочинениях (см. начало абзаца). В Лилиподне многое делается гораздо быстрее именно потому, что он использует почти исключительно обычную клавиатуру. Дергаться от клавиатуры к мышке и обратно нет совершенно никакой необходимости. А скорость печати у нас с вами, как правило, довольно высокая. Поэтому я советую попробовать освоить в придачу к вашему любимому редактору еще и LilyPond. Тем более, что освоить его совсем не трудно. А еще он, в отличие от Финале и Сибелиуса, бесплатный.

 

Почему я сам начал набирать ноты в Лилипонде? Причин было несколько. Во-первых, меня не вполне устраивала скорость набора нот в Финале и Сибелиус. Это долго. Но нормальных альтернатив я не видел. Где-то год назад я начал подолгу сидеть в Интернете. А ftp-протокол через windows, прямо вам скажу, не сахар. Я перешел на Linux. Под Линуксом Сибелиус не работал. Точнее говоря, работал, но как-то очень глюкаво. Зато под Линуксом раотал Лилипонд. Однажды, когда я был в гостях у Алексея Хохлова, мы его скачали и поставили. Затем полдня не могли разобраться, с какой стороны он включается. Затем я его снес. Затем — еще через полгода — поставил снова. На этот раз я поступил хитрее. Полазив по Интернету, я нашел весьма скудные (!) сведения о том, как набирать ноты в LilyPond'е, посетил forumklassika, прочитал тамошний tutorial на русском языке и... этого мне хватило, чтобы скачать документацию с lilypond.org и начать читать ее с начала. Хочу всех обнадежить: самое трудное в Лилипонде — это его включить. После того, как вы откомпилировали свою первую программу, можете смело считать, что половина дела сделана.

 

Я практически не оговорился. LilyPond — это, по сути, компилятор программ, написанных на специальном языке (в этом его, быть может, главное отличие от Finale и Sibelius). Причем язык этот очень близок естественному языку (как Pascal или SQL), поэтому писать на нем очень легко. Впрочем, запустить Лилипонд довольно просто. Если у Вас есть файл с музыкой test.ly, то:

•в Windows достаточно два раза щелкнуть по нему мышкой.Появятся файлы test.pdf, test.ps и test.txt. Первые два из них — нотные документы для печати, третий — лог работы компилятора. в нем содержатся сведения об ошибках, если Вы что-то набрали не так, как нужно

•в Linux можно набрать в консоли " lilypond test.ly". Появятся файлы test.pdf и test.ps. Лог с ошбками выведется в той же консоли

 

Разумеется, Лилипонд можно запускать и по-другому, но... Не все сразу!

 

Документация по LilyPond написана, на мой взгляд, очень удачно. При первом прочтении может показаться, что она написана непоследовательно, поскольку часто встречаются термины, значения которых раскрываются позднее. Но в этом и заключается изюминка: на каждом этапе вы можете применитьто, что уже знаете, на практике. Что-то вы сможете сделать, прочитав только первую главу, вторая глава откроет вам еще кое-что и так далее. В итоге вы постепенно освоите все богатство, все тонкости нотного набора в Лилипонде. Если бы документация писалась не " от частного к общему", а наоборот, вам пришлось бы для начала изучить язык програмирования Scheme, на котором пишутся функции в LilyPond. А зачем вам изучать язык программирования, когда цель — набор нот? Хотя, конечно, тот, кому нужно, будет использовать и средства Scheme. Но таких людей, все же, не 100%.

 

Теперь перейдем к конкретике. Простейшая программа на LilyPond выглядит так:

 

Здесь, впрочем, мне придется прерваться. Продолжу чуть позже

 

Продолжаю...

того же числа, 20.04

 

 

Итак, переходим к конкретике. Простейшая программа на LilyPond выглядит так:

\version " 2.12.2" \relative c' { c d e f g f e d c }

Как видите, нетрудно догадаться, что c d e f g f e d c — это ноты. Фигурные скобки { } показывают, что к тому, что внутри них, относится команда \relative c'. Что такое \relative c', положим нам пока не понятно. Но давайте посмотрим на результат:

 

Простейшая программа на Лилипонде

 

(щелкните мышкой по картинке, чтобы увидеть код)

 

Теперь виден следующий принцип. Ноты все располагаются относительно ноты до первой октавы. Если бы надо было получить все ноты октавой выше — достаточно вместо \relative c' написать \relative c'', Кроме того, можно заметить, что каждая следующая нота пишется как можно ближе к предыдущей. В частности, нота ре нарисовалась не в малой, а в первой октаве. Да и вообще, нужны ли здесь мои комментарии? По большому счету, достаточно увидеть программный код, а затем получившуюся картинку, чтобы понять, что произошло.

 

Конечно, возникают вопросы. Что делать, если нужен не скрипичный, а басовый ключ? Как сделать другой размер? Как поставить заключительную тактовую черту? Не спешите. Если изучать LilyPond последовательно и ничего не пропуская, все со временем выяснится. Создатели Лилипонда просто заботятся о том, чтобы ваша крыша не поехала от чрезмерных сведений на каждом этапе. Скрипичный ключ, размер 4/4, тональность до мажор, наличие тактовых черт, пятилинейная нотная строка и многое другое установлено по умолчанию. КАЖДОЕ из умолчаний можно поменять. Но не все сразу. Если человек не знает ноты, какой смысл объяснять ему особенности тонального плана в симфониях Бетховена? Если прописать вручную ключ, размер и тональность, то самая простая программа не была бы уже самой простой. Она бы выглядела, например, так:

\version " 2.12.2" \relative c' { \clef treble \time 4/4 \key c \major c d e f g f e d c }

Согласитесь, что этот текст несколько сложнее, чем предыдущий. Хотя результат — абсолютно аналогичный предыдущему. Но незнакомых слов больше. И не зная, что означает текст предыдущей, простейшей программы, разобраться с этой, более сложной было бы, возможно, и не очень просто. Однако мы уже знаем, что означает " c d e f g f e d c" и " \relative c' "! Поэтому догадаться об остальном не так уж трудно:

\clef treble — скрипичный ключ \time 4/4 — размер 4/4 \key c \major — тональность до мажор

Как теперь сделать тональность ре минор? Это практически очевидно: написать вместо " \key c \major" — " \key d \minor". Так же можно изменить ключ на басовый (bass), альтовый (alto), теноровый (tenor) и т.д.Так же можно изменить и размер. У вас уже возникли вопросы типа: " Откуда берутся названия ключей? какие можно вводить размеры? как указать сложный размер? " Прекрасно! Значит, мы еще с чем-то разобрались и пора двигаться дальше. Конечно, где-то в Лилипонде запрограммировано, что " bass" означает басовый ключ, " tenor" — теноровый и т.д. Просто все " служебные" слова максимально приближены к естественным их значениям.

 

Читая документацию LilyPond, вы будете двигаться от простого к сложному. На каждом этапе задачи будут такими же простыми, как те, которые мы только что разобрали. Надо лишь читать подряд, ничего не пропуская. Простейшая программа — верхушка лилипондовского айсберга, ниже которой располагаются ключи, тональности и размеры, затем конструирование партитур и верстка, затем приемы нестандартной нотации, затем переопределение заданных по умолчанию параметров (от месторасположения указаний темпа до толщины штиля или ребра), затем написание функций на языке Scheme. Попутно вы узнаете множество специально созданных решений для стандартных ситуаций (типа перепрыгивающих нот из левой руки в правую на фортепиано). И могу вас заверить, по количеству удобных стандартных решений, актуальных именно для музыканта, LilyPond очень серьезно обгоняет Finale и Sibelius!

 

Как изучать документацию? Я поступил как «мамонт». Скачал PDF-файл (https://lilypond.org/doc/v2.10/Documentation/user/lilypond.pdf), распечатал его, переплел у брошюровщиков в ближайшем подвале и прочитал. Читал примерно два дня. Потому что ехал в поезде. Если вам проще читать на компьютере, то, возможно, проще читать HTML-версию (https://lilypond.org/doc/v2.10/Documentation/user/lilypond-big-page). Там можно кликнуть мышкой на любой из примеров и посмотреть соответствующий код.

 

И еще один важный момент. Набирать код для LilyPond лучше в специальных блокнотах, где есть подсветка тэгов. Я, поскольку обитаю в SuSE Linux, использую встроенный редактор KWrite. В нем текст простейшей программы выглядит так:

 

Простейшая программа LilyPond в KWrite

 

Под Windows, я уверен, есть блокноты, которые, по крайней мере, не хуже. Существуют умельцы (где-то в сети, забыл где), которые набирают лилипондовский текст в редакторе из программы FAR (раскрасив тэги соответствующим образом), а Лилипонд запускается у них прямо из FAR'а по горячей клавише. Это фантастически удобно.

 

О выборе блокнота советую подумать серьезно, так как по мере усложнения текста наглядность начинает приобретать все большее и большее значение:

код LilyPond в KWrite. Пример посложнее

Очень удобно использовать в качестве блокнота редактор vim. Для этого, правда, необходимо освоить синтаксис Vim'а, хотя бы в масштабах того, что изложено в vimtutor (чтобы его запустить, надо после установки редактора vim набрать в консоли vimtutor в Linux или найти Vimtutor в меню Пуск в Windows). Кое-что дополнительно я написал здесь: LilyPond и Vim. Подсветка тэгов и расположение окон

 

В заключение, приведу два примера. Почему именно эти два? Во-первых, ноты я набрал сам. Во-вторых, здесь все-таки не абстрактный набор нотных знаков, а более или менее живая музыка (о чем, впрочем, судить вам).

 

Духовный стих " Жизнь плачевно я провожаю", набранный в LilyPond

 

(щелкните мышкой по картинке, чтобы увидеть код, прослушать MIDI можно здесь)

 

Пример гармонизации, набранный в LilyPond

 

(щелкните мышкой по картинке, чтобы увидеть код, прослушать MIDI можно здесь)

 

Вот и все.

 

Удачи вам в изучении технологий набора нот на компьютере!

 

П.К.

 

P.S. Для тех, кто считает, что ноты целесообразно набирать от руки. Какое-то время назад и сам так думал. Однако мне помог мой характер, который не дает делать дело вовремя, а заставляет все оставлять на последний момент. Около 2000 года на 1-м курсе Гнесинки я понял, что написание от руки партитуры дипломной работы приведет к фиаско: я просто не успею изготовить оркестровые голоса. Так я стал изучать Finale. В итоге характер не подвел: на изготовление партий остался ровно один день. Если вы, в отличие от меня, волевой человек, все равно советую подумать: изготовление оркестровых (или даже ансамблевых) партий — штука долгая. Или дорогая...

 

Комментарии:

 

olga

14.05.2009 20: 28

 

Мне страшно представить, как будет выглядеть код для партитуры!)))

 

Shoorick

22.07.2009 13: 38

 

Живущему под KDE4 можно порекомендовать Frescobaldi — он сочетает в себе редактор (а точнее, общую для разных КДЕшных редакторов часть) с рядом полезных штуковин: просмотром результата в PDF, возможностью перейти к нужной ноте в лилипондовом исходнике, кликнув по ней в окошке просмотра PDF, а также с генератором новых файлов, где можно в диалоговом окошке задать используемые голоса, кучу текстовых параметров (название произведения, авторов, темп), да и кучу нетекстовых тоже (размер, тональность).

 

Ещё советую обратить внимание на Denemo — он хорош в качествне промежуточного инструмента для набора нот перед отправой их в Frescobaldi и Lilypond.

 

 

VIM

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

 

Пожалуй, Vim нельзя просто запустить и начать работать — требуется определенная подготовка. Зато стоит раз испытать его в деле и поражаешься тому, как можно было без него обходиться.

Для быстрого ознакомления с функциональностью Vim запустите команду vimtutor.

 

 

Содержание [убрать]

1 Начнем с примера

2 Введение

3 Vi 3.1 Переключение режимов

3.2 Открыть/создать файл

3.3 Перемещение по файлу

3.4 Редактирование файла

3.5 Запись/выход

3.6 Коэффициент повторения

3.7 Дополнительные возможности

 

4 Vim 4.1 Главные отличия от vi

4.2 Команды

4.3 Слово под курсором

4.4 Визуальный режим

4.5 ~/.vimrc 4.5.1 Для примера приводится выдержка из файла _vimrc автора:

4.5.2 Можно добавить привычное поведение и привычные сочетания клавиш.

4.5.3 Дополнительно

 

4.6 Vim и русская раскладка клавиатуры 4.6.1 Способ 1

4.6.2 Способ 2

 

 

5 Вставка форматированного текста с отступами

6 Поиск в файлах с выводом в список

7 Как открыть файл в нужной кодировке 7.1 Автоматически

7.2 Можно указать кодировку текста вручную

7.3 Можно предварительно, перед открытием файла, указать ожидаемую кодировку

7.4 Пользовательское меню

7.5 Дополнительно

 

8 Конвертация кодировки файла 8.1 Пример: как сконвертировать файл из MS Windows cp1251 в Linux utf-8

8.2 Пример: конвертировать файл из Linux utf-8 в MS Windows cp1251

 

9 Vim при переводах текста, или для чтения английской документации 9.1 Что возьмем

9.2 Как настроим

9.3 Рецепт для очень умелых ручек

 

10 Строка статуса редактора

11 Проверка орфографии 11.1 Пользовательское меню

11.2 Как это работает?

 

12 Ссылки

 

 

Начнем с примера[править]

 

Типичная сессия работы с Vim выглядит так:

# vim httpd.conf

 

 

В открывшемся редакторе:

/SSLVerif

nwr1ZZ

 

 

В данном случае задачей было изменить значение определенного параметра конфигурации apache. В обычном редакторе подобный результат достигается следующими действиями:

# editor_name httpd.conf

 

 

или [Ctrl]+[O] и выбрать файл из диалога открытия файла.

[Ctrl]+[F]SSLVerif[Enter][Enter][Esc]

[Ctrl]+[→ ] [Del] 1

[Ctrl]+[S]

[Alt]+[F4]

 

 

Объяснение команд обычного редактора:

Открыть файл «httpd.conf» одним из указанных способов.

[Ctrl]+[F] — открыть диалог поиска.

Ввести «SSLVerif».

[Enter] — фокус в диалоге поиска обычно всегда стоит на поиске следующего вхождения искомого слова.

[Esc] — закроет окно поиска, а [Ctrl]+[→ ] снимет фокус с найденного слова и перейдёт к следующему (в некоторых редакторах курсор проскакивает слово и переходит через слово — тогда нажимаем [← ] не отпуская [Ctrl], а в некоторых одиночное нажатие приводит только лишь к снятию фокуса и нужно повторно нажать [→ ]).

[Del] удалит " 0" и остаётся напечатать " 1".

[Ctrl]+[S] — сохранить изменения.

[Alt+F4] — закрыть файл и выйти.

 

Объяснение команд VIM:

/ — Перейти в режим поиска

Kлавиша Enter — Искать'.

n — Перейти к следующему вхождению искомой строки

w — Переместить курсор к следующему слову

r — Заменить знак под курсором

ZZ — Сохранить изменения и выйти

ZQ — Выйти без сохранения изменений

 

С одной стороны у vim более лаконичные команды, с другой же клавиши для «обычного» редактора работают в практически неизменном виде во многих приложениях и их нужно выучить лишь раз.

 

Введение[править]

 

Здесь я делюсь опытом работы в Vim’е. Предполагается, читатель имеет установленные vi и vim, а также знаком с основами работы с UNIX-подобной системой.

 

Помнится, когда товарищ установил FreeBSD на мою домашнюю ЭВМ, некоторые файлы открывались непонятным мне образом. Я быстро старался избавиться от этого несчастья. Через некоторое время я понял, что происходит: в системе по умолчанию, в переменной окружения EDITOR, установлен редактор vi. Я сразу поменял его на 'ee' (easy editor). Это действительно простой редактор, затруднений с ним возникнуть просто не может, однако и особой свободы в нем не испытать. Вскоре его стало не хватать…

 

Описание работы с редактором я привожу в хронологическом порядке — от простого к сложному. Так как Vim на 99 % совместим с Vi, сначала я дам краткое описание работы с vi.

 

Легенда сокращений и специальных символов:

Строки, начинающиеся с символа " #" - командная строка;

< ESC> - нажатие клавишу Escape (или Ctrl-[);

< CR> -... Enter;

< SHIFT> -... Shift

^x -... Ctrl-x

 

 

Vi[править]

 

Главное отличие Vi от других редакторов в том, что у него несколько режимов работы. При этом привычный нам режим ввода текста — не основной. Вместо этого, в обычном режиме vi воспринимает каждое нажатие на клавишу, как команду. Это позволяет мгновенно перемещаться по файлу и быстро осуществлять редактирование.

 

Насколько Vi быстрее других редакторов? — Давайте сравним. Например, вот действия, которые необходимо выполнить [«продвинутому»] пользователю, чтобы поменять местами две буквы в обычном редакторе и в vi:

 

Обычный редактор:

< Shift-Стрелка вправо>

< Ctrl-x>

< Стрелка влево>

< Ctrl-v>

 

 

Vi:

xp

 

 

Переключение режимов[править]

«Обычный режим» — перемещение по файлу, стирание текста и другие редактирующие функции. Переход в него из любого другого режима:

< ESC>, иногда 2 раза;

< Ctrl-[>

 

«Режим ввода» — ввод текста. Заметьте, что стирание и ввод текста происходит в двух разных режимах. Переход в него из обычного режима:

i

< Insert>

 

«Командный режим» — Команды (операции с файлом, поиск и замена, настройка редактора…). Переход в него из обычного режима:

:

 

«Режим поиска» — ввод поискового запроса. Переход в него из обычного режима

/, поиск от курсора до конца документа

?, поиск от курсора до начала документа

 

«Визуальный режим» — режим выделения текста. Переход в него из обычного режима

v

 

 

Открыть/создать файл[править]

 

Опишем операции, которые можно производить с файлом.

# vi mamapapa.txt - открыть один файл

# vi mamapapa.txt ++11 - открыть файл и перейти к строке 11.

# vi mama.txt papa.txt - открыть файл mama.txt, после выхода из него открыть файл papa.txt

# vi -о mama.txt papa.txt - открыть сразу все файлы.

 

 

Файл открывается в обычном режиме с помощью команды vi. Здесь мы можем просмотреть файл, переместиться по его содержимому, стереть текст, но ввести текст в этом режиме нельзя.

 

Создание файла происходит при помощи той же команды. Собственно создание файла происходит в момент сохранения.

 

Для открытия или создания нового файла в обычном режиме набираем

: e filename

 

 

или

: new filename

 

 

Перед этим нужно сохранить предыдущий файл

: w - сохраняет файл с существующим именем

: w filename - сохраняет файл с новым именем

 

 

Перемещение по файлу[править]

 

Самые часто используемые в vi клавиши — клавиши перемещения. Это знаменитые h j k l, соответствующие стрелкам влево, вниз, вверх и вправо. Стрелочки тоже работают (при правильном указании терминала). Можно использовать также быстрые клавиши:

0 (" ноль") — в начало текущей строки;

^ — в начало текущей строки (к первому непробельному символу);

$ — в конец текущей строки

w — на слово вправо

b — на слово влево

W — до пробела вправо

B — до пробела влево

} — абзац вниз

{ — абзац вверх

< Ctrl-f> — на страницу (экран) вниз

< Ctrl-b> — на страницу (экран) верх

gg — перейти в начало файла

G — перейти в конец файла

< number> G — перейти на конкретную строку < number>

/< text> < CR> — перейти к < text>

? < text> < CR> — то же самое, но искать назад

n — повторить поиск

N — повторить поиск назад

[[ — в начало функции

“ — к месту выполнения команды [[

 

Редактирование файла[править]

 

Предположим в нашем файле записан следующий текст:

 

 

— Винни, тебе что намазать на хлеб, мёду или сгущённого молока?

 

 

— И того, и другого, и можно без хлеба!

— Ну, если вы больше ничего не хотите…

 

— А что, что-то есть ещё?

Диалог симпатичный, но несколько несвязный. Давайте изменим его — для этого необходимо перейти в режим ввода. Самый простой способ — из обычного режима нажатие клавиши «i». После чего можно смело приступать к вводу текста. < ESC> вернет нас к обычному режиму. Другие важные команды:

R — перейти в режим ввода с заменой текста (аналог insert)

r — заменить один символ

i — перейти в режим ввода с текущей позиции

I — переместиться в начало строки и перейти в режим ввода

a — перейти в режим ввода после курсора

А — переместиться в конец строки и перейти в режим ввода

o — перейти в режим ввода с новой строки под курсором

O — перейти в режим ввода с новой строки над курсором

x — удалить символ под курсором

X — удалить символ влево (удалить символ перед курсором)

d — используется совместно с командами перемещения. Удаляет символы с текущего положения курсора до положения после ввода команды перемещения. Пример: dw - удаляет символы с текущего до конца слова; diw - удаляет слово под курсором

с — команда аналогичная d, но после удаление переходит в режим ввода. Очень удобная альтернатива команде R

dd — удалить текущую строку (вырезать)

d< число> d — стирание числа строк начиная с текущей

yy — копирование текущей строки в неименованный буфер

y< число> y — копирование числа строк начиная с текущей в неименованный буфер

p — вставка содержимого неименнованного буфера под курсором

P — вставка содержимого неименнованного буфера перед курсором

J — слияние текущей строки со следующей

u — отмена последней команды

U — отмена всех последних изменений в строке

< Ctrl-r> или: redo вперед по изменениям

. — повтор последней команды

 

Конечно, запомнить все команды сразу трудно, даже не нужно (к тому же здесь перечислены не все). Уверяю вас, через некоторое время эти команды будут пользоваться спросом.

 

Наконец мы дошли к самому главному — командному режиму. Помним как в него перейти? «:». Шифт-ж, если по-русски.

 

Запись/выход[править]

 

Если вы в режиме ввода, то необходимо предварительно нажать < ESC>, чтобы перейти в обычный режим.

ZQ - выйти без сохранения

 

 

или

: q! - выйти без сохранения

 

ZZ - записать файл и выйти(Если файл не изменяли, то записываться он не будет)

 

 

или

: wq - записать файл и выйти

 

 

или

: x - записать файл и выйти

 

: w< CR> - записать файл

 

: sav filename< CR> - " Сохранить как"

 

 

или

: w filename< CR> - " Сохранить как"

 

: w! < CR> - записать файл.

 

 

Эта команда может помочь, если файл открыт в режиме " read-only" (с опцией -R), если файл заблокирован другим пользователем, либо отсутствуют такие привилегии, либо еще какая беда. При попытке записи без «!» будет выдано соответствующее предупреждение.

: w new_file< CR>

 

 

Создать новый файл «new_file» и записать в него текущее содержимое. Если файл существует, будет показано предупреждение. Дальше вы продолжаете работать со старым файлом — mamapapa.txt

: q< CR> - выйти из редактора.

 

 

Если файл был изменен, у вас ничего не получится. В таких случаях необходимо добавлять после команды «!»:

: q! < CR> - выйти из файла, не сохраняя изменения

: qa! < CR> - выйти из всех файлов, не сохраняя изменения

 

 

Коэффициент повторения[править]

 

Почти все команды vi принимают так называемый коэффициент повторения. Попросту говоря, если перед командой в обычном режиме вы указываете число, то команда повторяется соответствующее количество раз. Например, команда «j» перемещает курсор на одну строку вниз — «3j» переместит курсор на 3 строки вниз. Результатом команды «iпривет< ESC>», как вы, наверное, догадались, будет вставка слова «привет» — «2iпривет< ESC>» вставит «приветпривет».

 

Дополнительные возможности[править]

 

Есть несколько вещей, без которых редактирование похоже на пытку:

^G - показать информацию о файле

 

: < number> - перейти на строку с номером < number>

< number> G - перейти на строку с номером < number>

: set number - отобразить слева нумерацию строк (: set nonumber - спрятать нумерацию)

: set wrap - переносить длинные строки(: set nowrap - не переносить)

: sy[ntax] on/off - включить/выключить подсветку синтаксиса

: colorscheme < name> - задать цветовую тему (где < name> имя темы, TAB работает как авто-дополнение)

: h или: help - список возможной помощи(: viusage,: exusage)

привести концы строк в файле к виду dos или unix соответственно:

: set fileformat=dos

: set fileformat=unix

Задать размер табуляции в 4 пробела:

: set tabstop=4

: set expandtab

Размер табуляции новой строки

: set shiftwidth=4

 

 

Конвертация кодировки файла:

: set fenc=cp1251< CR>

: set fenc=koi8-r< CR>

: set fenc=ibm866< CR>

: set fenc=utf-8< CR>

 

 

Смена кодировки (возможна до внесения изменений в редактируемый файл. т.е. сразу после открытия)

: e ++enc=cp1251< CR>

: e ++enc=koi8-r< CR>

: e ++enc=ibm866< CR>

: e ++enc=utf-8< CR>

 

 

Vim[править]

 

Главные отличия от vi[править]

Неограниченное число undo/redo. (в 7-ой версии появились деревья)

Многооконность.

Поддержка множества буферов. (в 7-ой версии появились закладки)

Подсветка синтаксиса.

Редактирование командной строкой.

Достраивание имен файлов.

Визуальное редактирование.

Кроссплатформенность.

Графический интерфейс (GUI).

Проверка орфографии

 

Команды[править]

 

Переход к началу файла в Vim отличается от Vi:

gg

 

 

Переход к строке под номером < number>:

< number> gg

 

 

Слово под курсором[править]

 

Перейти к следующему вхождению слова под курсором

*

 

 

Перейти к предыдущему вхождению слова под курсором

#

 

 

Перейти к определению слова под курсором

gd (go definition)

 

 

Перейти к редактированию файла (под курсором должен быть путь)

gf (go file)

 

 

Визуальный режим[править]

 

Это существенное расширение возможностей Vi, без которого не обходится ни один «нормальный» текстовой редактор. Режим предназначен для выделения блока текста и дальнейшей работы с ним и состоит из 3-х последовательных шагов:

1.Пометка начала блока с помощью «v», «V» или CTRL-V. Блок помечается с того символа на котором находится курсор(по умолчанию).

2.Перемещение курсора в конец необходимого блока. Последний символ также будет включен в выделенный блок.

3.Вызов необходимой команды.

 

Команда «v» предназначена для выделения текста посимвольно. Символы до и после курсора в строке не будут входить в выделение. Необходима в первую очередь для копирования участков текста в строке.

«V» — для выделения текста построчно.

CTRL-V — для выделения прямоугольного участка текста. Удобна в случае редактирования структурированного текста.

 

С выделенным участком текста можно производить стандартные действия по редактированию(копирование — «y», удаление — «d»). Напомню, что в Vim при удалении участка текста, он автоматически помещается в специальный регистр, что равноценно «вырезанию» участка текста, который потом можно будет вставить с помощью команды «p»(вставка текста после курсора) или «P»(вставка текста перед курсором).

 

~/.vimrc[править]

 

vimrc — это файл конфигурации Vim. При запуске Vim сначала читает этот файл и применяет записанные в нем настройки. Рекомендуемое расположение этого файла для различных платформ:

Unix-like $HOME/.vimrc

MS-DOS and Win32 $HOME/_vimrc или $VIM/_vimrc

 

 

Файл конфигурации используется для настройки различных аспектов поведения и внешнего вида Vim.

 

Комментарии в этом файле начинаются с символа " (двойная кавычка) и продолжаются до конца строки.

 

Для примера приводится выдержка из файла _vimrc автора: [править]

" установить keymap, чтобы по Ctrl+^ переключался на русский и обратно

set keymap=russian-jcukenwin

" по умолчанию - латинская раскладка

set iminsert=0

" по умолчанию - латинская раскладка при поиске

set imsearch=0

" игнорировать регистр при поиске

set ic

" подсвечивать поиск

set hls

" использовать инкрементальный поиск

set is

" ширина текста

set textwidth=70

" минимальная высота окна пусть будет 0 (по умолчанию - 1)

set winminheight=0

" всегда делать активное окно максимального размера

set noequalalways

set winheight=9999

" установить шрифт Courier New Cyr

set guifont=courier_new: h10: cRUSSIAN

" настраиваю для работы с русскими словами (чтобы w, b, * понимали

" русские слова)

set iskeyword=@, 48-57, _, 192-255

" задать размер табуляции в четыре пробела

set ts=4

" отображение выполняемой команды

set showcmd

" перенос по словам, а не по буквам

set linebreak

set dy=lastline

 

 

Можно добавить привычное поведение и привычные сочетания клавиш.[править]

Например, можно будет прокручивать (скроллить) текст колесиком мыши и вставлять выделенное в X`ах мышкой в Vim нажатием средней кнопки мыши (нажать на колесико мыши):

set mouse=a

map < S-Insert> < MiddleMouse>

map! < S-Insert> < MiddleMouse>

 

По < F2> сохранение сделанных изменений:

imap < F2> < Esc>: w< CR>

map < F2> < Esc>: w< CR>

 

По < F3> вставка содержимого заданного файла в редактируемый текст. Требуется ввести имя файла. Работает авто-дополнение имени файла по < Tab> в текущем каталоге.

imap < F3> < Esc>: read

map < F3> < Esc>: read

 

 

Также возможен интересный прием работы:

: read! ls -la

 

 

Эта команда вставит в текущую позицию редактируемого текста весь вывод указанной после "! " команды (в нашем случае: ls -la).

По < F4> открывается новая вкладка (tab) и выводится список каталогов и файлов текущего каталога. Клавишами управления курсором можно выбрать каталог или файл. Нажатие < Enter> на каталог отобразит его содержимое в том же режиме (можно путешествовать по каталогам), а нажатие < Enter> на файле - откроет его в этой же вкладке. Работает быстрый поиск-перемещение по " /".

imap < F4> < Esc>: browse tabnew< CR>

map < F4> < Esc>: browse tabnew< CR>

 

По < F5> позволяет переключать вкладки справа-налево, по-порядку, отображая открытые в них файлы.

imap < F5> < Esc>: tabprev < CR> i

map < F5>: tabprev < CR>

 

По < F6> позволяет переключать вкладки слева-направо, по-порядку, отображая открытые в них файлы.

imap < F6> < Esc>: tabnext < CR> i

map < F6>: tabnext < CR>

 

Пользовательское меню. По < F9> позволяет приостановить работу Vim и вызвать соответствующие программы:

set wildmenu

set wcm=< Tab>

menu Exec.GForth:! gforth % < CR>

menu Exec.Perl:! perl % < CR>

menu Exec.Python:! python % < CR>

menu Exec.Ruby:! ruby % < CR>

menu Exec.bash:! /bin/bash< CR>

menu Exec.xterm:! xterm< CR>

menu Exec.mc:! mc< CR>

menu Exec.xterm_mc:! xterm -e mc< CR>

map < F9>: emenu Exec.< Tab>

 

Обратите внимание на, например, конструкцию:! python % < CR> — символ % будет заменён на имя текущего редактируемого файла. В итоге, Vim приостановит работу и вызовет python filename.ext (если вы редактировали filename.ext) в текущем терминале (в том же, где запущен Vim), а затем, после завершения работы python filename.ext, вернётся к редактированию файла. Не забудьте сохранить изменения перед вызовом. Впрочем, Vim должен будет вам напомнить о том, что изменения нужно сохранить, если вы этого не сделали.Заметьте: что Exec. — это не специальная команда, в всего лишь идентификатор меню, объединяющая группу команд и их идентификаторы/названия пунктов меню/.Пользовательское меню. По < F10> позволяет вызвать меню различных вариантов завершения работы с Vim. (Глоток воздуха для новичка:)

set wildmenu

set wcm=< Tab>

menu Exit.quit: quit< CR>

menu Exit.quit!: quit! < CR>

menu Exit.save: exit< CR>

map < F10>: emenu Exit.< Tab>

 

Позволяет по < Tab>, более привычному некоторым пользователям, вызывать авто-дополнение для текущего активного синтаксиса:

function! InsertTabWrapper(direction)

let col = col('.') - 1

if! col || getline('.')[col - 1]! ~ '\k'

return " \< tab> "

elseif " backward" == a: direction

return " \< c-p> "

else

return " \< c-n> "

endif

endfunction

inoremap < tab> < c-r> =InsertTabWrapper (" forward")< cr>

inoremap < s-tab> < c-r> =InsertTabWrapper (" backward")< cr>

 

Дополнительно[править]

 

Для получения более подробной информации по файлу _vimrc можно набрать в командной строке Vim команду

: help vimrc

 

 

Vim и русская раскладка клавиатуры[править]

 

В обычном режиме Vim по умолчанию ожидает, что консоль находится в режиме ввода латинских символов. Если вы, к примеру, редактируете с помощью Vim текст на русском языке, или в смешанных кодировках (к примеру, HTML-страницу на русском), то постоянная необходимость переключать системную клавиатурную раскладку очень быстро вам надоест. Существует несколько способов решить эту проблему.

 

Способ 1[править]

 

Сделать так, чтобы русские буквы можно было вводить, когда системная раскладка находится в режиме ввода латинских символов.

 

Для этого в файл конфигурации Vim, который называется.vimrc (или _vimrc в Microsoft Windows) нужно добавить следующие строки:

set keymap=russian-jcukenwin

set iminsert=0

 

 

После этого системную раскладку клавиатуры можно будет оставить в режиме ввода латинских символов, а переключение между языками осуществлять уже внутри самого редактора с помощью команды Ctrl+^ (Ctrl+6 в версии для Windows)

 

Чтобы настроить переключение языков на другую кнопку (например на F12), можно использовать такие команды:

для режима ввода символов: imap < F12> {ctrl-k}{ctrl-6}{ctrl-6}

При этом {ctrl-k} нужно вводить нажатием клавиш < Ctrl> и k. Это означает, что сначала нажимается клавиша < Ctrl> и удерживается нажатой, затем нажимается клавиша k и после этого обе клавиши одновременно отпускаются. После нажатия {ctrl-k} появится подсвеченный значок вопроса, который потом заменится на код клавиши\комбинации, которую Вы введёте, в данном случае {ctrl-6}{ctrl-6}, что будет выглядеть как ^^.

для режима ввода командной строки: cmap < F12> {ctrl-k}{ctrl-6}{ctrl-6}

В итоге, визуально в.vimrc это должно выглядеть так:

imap < F12> ^^

cmap < F12> ^^

 

 

Кроме этого, в версии для Windows Vim по умолчанию не настроен на использование кодировок клавиатуры, содержащих символы кириллицы, например CP1251 и KOI8-R (в версии же для Linux настройка по умолчанию корректна). Как следствие этого, Vim при редактировании русского текста будет неправильно обрабатывать команды перемещения по тексту, основанные на поиске слова, такие как w (одно слово вперед), b (одно слово назад), * (найти в тексте слово под курсором) и т. п. Чтобы настроить Vim для корректной работы с этими командами независимо от языка, достаточно добавить в файл конфигурации _vimrc следующую строку:

set iskeyword=@, 48-57, _, 192-255

 

 

Однако вышеуказанная строка не позволяет изменять регистр русского текста в версии Vim для Windows. Для решения обеих этих проблем вместо вышеуказанной строки в файл конфигурации может быть добавлена следующая строка:

language ctype Russian_Russia.1251

 

 

Способ 2[править]

 

Сделать так, чтобы Vim понимал, какие клавиши нажимаются, если включена русская раскладка.

 

Для этого в.vimrc добавьте следующую строчку:

 

Для стандартной раскладки (Windows, Linux):

set langmap=ёйцукенгшщзхъфывапролджэячсмитьбю; `qwertyuiop[]asdfghjkl\; 'zxcvbnm\,., ЙЦУКЕHГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ; QWERTYUIOP{}ASDFGHJKL: \" ZXCVBNM< >

 

 

Для раскладки Mac:

set langmap=йцукенгшщзхъфывапролджэячсмитьбю/ЙЦУКЕHГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ/; qwertyuiop[]asdfghjkl; 'zxcvbnm,./QWERTYUIOP[]ASDFGHJKL: 'ZXCVBNM,./

 

 

(Так как в Mac-раскладке символы под цифрами вводят другие символы, соответствующие английским, например, нажатие Shift+4 вводит " %" вместо " $", их не получится переназначить, поэтому способ 1 подходит лучше.)

 

После этого Vim будет нормально понимать команды, вводимые при включенной русской раскладке.

 

Если у вас локаль UTF, то данный способ не работает в старых версиях Vim. Необходимо каждый символ назначить индивидуально:

map ё `

map й q

map ц w

map у e

map к r

map е t

map н y

map г u

map ш i

map щ o

map з p

map х [

map ъ ]

map ф a

map ы s

map в d

map а f

map п g

map р h

map о j

map л k

map д l

map ж;

map э '

map я z

map ч x

map с c

map м v

map и b

map т n

map ь m

map б,

map ю.

map Ё ~

map Й Q

map Ц W

map У E

map К R

map Е T

map Н Y

map Г U

map Ш I

map Щ O

map З P

map Х {

map Ъ }

map Ф A

map Ы S

map В D

map А F

map П G

map Р H

map О J

map Л K

map Д L

map Ж:

map Э "

map Я Z

map Ч X

map С C

map М V

map И B

map Т N

map Ь M

map Б <

map Ю >

 

 

Возможно это зависит от версии, у меня работает так и причём в UTF:

set langmap=ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕHГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ; `qwertyuiop[]asdfghjkl; 'zxcvbnm,.~QWERTYUIOP{}ASDFGHJKL: \" ZXCVBNM< >

 

 

Так как в последних версиях возможна проблема с парсером символа экранирования '\' - его необходимо записывать как '\\' перед специальными символами ', ', '; ', '" ' и '\'. Потому в версии 7.3 правильная строка может быть такой:

set langmap=! \\" №\\; %? *ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕHГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ;! @#$%& *`qwertyuiop[]asdfghjkl\\; 'zxcvbnm\\,.~QWERTYUIOP{}ASDFGHJKL: \\" ZXCVBNM< >

 

 

Вставка форматированного текста с отступами[править]

 

У начинающих часто возникает ситуация, когда при копировании форматированного текста с отступами (например, текст страницы из браузера или пример форматированного кода из документации) в vim строки «съезжают» вправо. Это происходит потому, что редактор пытается помочь отформатировать текст «красиво» и копирует отступы с предыдущей строки в новую. Бороться с этим легко:

: set paste

 

 

...вставляем форматированный текст с отступами в режиме редактирования (например, средней кнопкой мыши) и строки «съезжать» вправо не будут. После этого режим «вставки» можно отключить командой:

: set nopaste

 

 

Поиск в файлах с выводом в список[править]

 

В некоторых IDE есть очень удобная функция Find In Files. Она ищет заданную строку или регулярное выражение в файлах в заданной папке и выводит результат поиска в виде списка. Если щёлкнуть по строке этого списка то откроется файл в том месте где была найдена заданная строка. Подобная функция есть и в Vim. Чтобы найти в файлах нужную строку надо набрать команду:

: vimgrep /искомая строка/ Путь к файлам |: copen

 

 

Более конкретный пример:

: vimgrep /translator/ R: \projects\**\*.txt |: copen

 

 

Команда vimgrep ищет строку или регулярное выражение заключенное между символами // в файле или файлах и сбрасывает результаты в специальный буфер. А так же открывает файл с первым найденным результатом. Команда copen открывает буфер с результатами поиска. Путь к файлам может указывать как на один файл так и на набор файлов. Чтобы путь указывал на несколько файлов надо использовать символы? и *. Значение этих символов такое же как и в командной строке операционной системы. Чтобы поиск прошел по всем подпапкам указанной папки можно использовать две звездочки **. Пример использования **:

/usr/inc**/*.h

 

 

может означать:

/usr/include/types.h

/usr/include/sys/types.h

/usr/inc_old/types.h

 

 

Как открыть файл в нужной кодировке[править]

 

Автоматически[править]

 

При открытии файла Vim попытается определить кодировку, и открыть файл в этой кодировке. Для этого, в ~/.vimrc:

set encoding=utf-8 " set charset translation encoding

set termencoding=utf-8 " set terminal encoding

set fileencoding=utf-8 " set save encoding

set fileencodings=utf8, koi8r, cp1251, cp866, ucs-2le " список предполагаемых кодировок, в порядке предпочтения

 

 

К сожалению Vim не всегда удается определить кодировку файла правильно, и вместо осмысленного текста мы можем наблюдать кракозябры.

 

Можно указать кодировку текста вручную[править]

 

Например, можно вручную указать кодировку cp1251 (MS Windows) уже открытому тексту:

: e ++enc=cp1251

 

 

Можно предварительно, перед открытием файла, указать ожидаемую кодировку[править]

 

Для этого нужно установить переменную encoding (сокращенно enc). Например, установить кодировку ucs-2le (unicode MS Windows):

: set enc=ucs-2le

 

 

После этого можно открывать файл. Он откроется в этой кодировке.

 

Пользовательское меню[править]

 

Часто, для упрощения работы в Vim с файлами в различных кодировках, в ~/.vimrc определяют специальное пользовательское меню, которое будет вызываться, например, по < F12>.

set wildmenu

set wcm=< Tab>

menu Encoding.koi8-r: e ++enc=koi8-r< CR>

menu Encoding.cp1251: e ++enc=cp1251< CR>

menu Encoding.cp866: e ++enc=cp866< CR>

menu Encoding.ucs-2le: e ++enc=ucs-2le< CR>

menu Encoding.utf-8: e ++enc=utf-8< CR>

map < F12>: emenu Encoding.< Tab>

 

 

Перемещаться по пунктам пользовательского меню можно по < Tab> или клавишами управления курсором.

 

Дополнительно[править]

 

Чтобы узнать список всех поддерживаемых кодировок, наберите команду:

: help encoding-values

 

 

Конвертация кодировки файла[править]

 

Vim автоматически пытается распознать текущую кодировку открываемого файла, отображает открываемый файл в кодировке отображения терминала, а при сохранении конвертирует в кодировку сохранения файла.

Текущая используемая в Vim кодировка задается переменной encoding (enc).

Кодировка отображения задается переменной termencoding (tenc).

Кодировка сохранения файла задается переменной fileencoding (fenc).

 

Кодировка файла encoding определяется при его открытии или берется из настроек системы. При отображении, Vim производит трансляцию текущей кодировки encoding в кодировку отображения termencoding. При сохранении в файл Vim конвертирует из текущей кодировки encoding в кодировку сохранения fileencoding.

 

Обычно encoding и fileencoding совпадают. Для того, чтобы сохранить файл в другой кодировке, надо перед сохранением задать соответствующее значение переменной fileencoding.

 

Чтобы узнать список всех доступных значений переменных encoding и fileencoding наберите команду:

: help encoding-values

 

 

Пример: как сконвертировать файл из MS Windows cp1251 в Linux utf-8[править]

Открываем файл в Vim:

vim filename.txt

 

Задаем текущую кодировку cp1251:

: e ++enc=cp1251

 

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

Задаем кодировку сохранения файла utf-8:

: set fileencoding=utf-8

 

Задаем формат переводов строки (dos, unix или mac):

: set fileformat=unix

 

Сохраняем файл.

: w

 

Выходим

: q

 

 

Пример: конвертировать файл из Linux utf-8 в MS Windows cp1251[править]

 

Обратная операция — конвертировать файл из Linux utf-8 в MS Windows cp1251 — будет такой:

vim filename.txt

: e ++enc=utf-8

: set fileencoding=cp1251

: set fileformat=dos

: w

: q

 

 

Vim при переводах текста, или для чтения английской документации[править]

 

Итак, чтобы можно было успешно читать и переводить документацию на английском языке, нужно ИМХО всего 3 вещи:

Редактор.

Переводчик.

Проверка орфографии

 

Если их удобно объединить, то можно получить хорошую среду, для перевода/чтения.

 

Что возьмем[править]

 

Редактор мы естественно возьмем VIM. Переводчик mueller консольная версия, работает так:

% mueller sex

sex [seks] _n. 1> _биол. пол; the weaker sex слАбый пол, жЕнщины; the sterner (или stronger) sex сИльный пол, мужчИны; the sex _шутл. жЕнщины 2> секс 3> _at

tr. половОй, сексуАльный; sex instinct половОй инстИнкт; sex intergrade гермафродИт

 

 

И орфографмометр: это spell в виме, словари скачаем с vim.org

 

Как настроим[править]

 

Мне интересна возможность выпадающего списка, при наведением на неизвестное мне слово мышкой. Для этого, после долгого чтения манов (или гугленья) узнаем что с помошью команды system можно выполнить какое-то действие, вывод которой куда-либо записать. Короче, пишем где-нибудь в ~/.vimrc

function! MyBalloonExpr()

return system(" mueller ". v: beval_text)

endfunction

set bexpr=MyBalloonExpr()

set ballooneval

set balloondelay=100

 

 

Определили функцию MyBallonExpr которая будет формировать строку mueller [слово на которое навели] и выполнять. Результат выполнения будет выдавать в «балоне» выпадающем окошке, через 100 миллисекунд.

 

Естественно вместо mueller вы можете поставить любую другую программу, которая переводит текст.

 

Рецепт для очень умелых ручек[править]

 

Если у вас нет консольной версии mueller, но есть много энтузиазма, то можно поступить так:

Идем на https://sourceforge.net/projects/mueller-dict/ и забираем оттуда mueller-dict-3.1.1.tar.gz

Извлекаем из полученного архива файл mueller-base.dict.dz и кладем его, скажем, в ~/dict/

Там же создаем файл mueller-base.sh со следующим содержимым:

#! /bin/bash

#

WORD=`echo $1 | sed -e 's/[A-Z]*/\L& /g; s/[,.;: ]//g'`;

if [ -z $WORD ]; then exit; fi;

LINES=50;

DICTIONARY=" $HOME/dict/mueller-base.dict.dz";

#

zgrep -aA$LINES '^'$WORD'$' $DICTIONARY | sed -e '/^$/d; 1s/^/ & /; /^[^ ]/, $d'

#

 

даем нашему новому консольному словарику право на исполнение:

$ chmod +x ~/dict/mueller-base.sh

 

и проверяем его работоспособность:

$ ~/dict/mueller-base.sh head

 

 

Для графической версии редактора (gvim) функция перевода в нашем ~/.vimrc должна будет выглядеть так:

function! MyBalloonExpr()

return system(" $HOME/dict/mueller-base.sh ". v: beval_text)

endfunction

set bexpr=MyBalloonExpr()

set ballooneval

set balloondelay=500

 

 

Примечание:

Естественно, что функция MyBalloonExpr() работает только в gVim, зато выглядит красиво. Наведите курсор мышки на слово и оставьте его неподвижным секунду-две (поначалу, можно вообще убирать руку с мышки, позже приловчитесь).

LINES=50 ограничивает количество выводимых строчек. Можете подобрать цифру под свой монитор.

Рекомендую выставить balloondelay=500 миллисекунд. Да, помедленнее. Но мышка будет меньше цепляться за слова.

 

Для текстовой версии редактора (vim) придётся делать специальную функцию TranslateWord() и вешать её вызов на специальную функциональную клавишу, например < F9>:

function! TranslateWord()

let s: dict = " $HOME/dict/mueller-base.sh"

let s: phrase = expand(" < cword> ")

let s: tmpfile = tempname()

silent execute "! ". s: dict. " ". s: phrase. " > ". s: tmpfile

execute " botright sp ". s: tmpfile

endfunction

map < F9>: call TranslateWord()< CR>

 

 

Примечание:

Это работает точно так же и в графической версии редактора (gvim). Поэтому метод можно считать универсальным, но требует нескольких нажатий клавиш, и сплит-окно выглядит менее элегантно, чем подсказки.

Открывшееся окно с переводом можно закрыть стандартным способом (: q). Ну, а если вы воспользовались советом выше и забиндили на клавишу < F10> предложенное пользовательское меню, то алгоритм работы будет совсем простой: < F9> смотрим перевод < F10> < Enter> вернули как было.

Этот метод использует временный файл

Т.к. в этом методе нет необходимости в ограничении, чтоб подсказка помещалась на экран, то для LINES можно увеличить лимиты, хоть до LINES=500. Этот метод не имеет ограничений на количество выводимых строчек.

 

Строка статуса редактора[править]

 

Строка статуса редактора бывает очень полезна, если вам не жалко пары строчек на экране. Добавьте в ~/.vimrc:

set laststatus=2 " всегда показывать строку статуса

set statusline=%f%m%r%h%w\ %y\ enc: %{& enc}\ ff: %{& ff}\ fenc: %{& fenc}%=(ch: %3b\ hex: %2B)\ col: %2c\ line: %2l/%L\ [%2p%%]

 

 

...и у вас в предпоследней строке будет выводиться что-то вроде этого:

.vimrc [vim] enc: utf-8 ff: unix fenc: utf-8 (ch: 92 hex: 5C) col: 26 line: 158/168 [94%]

 

 

Комментарий:

%f - имя файла и путь к нему, относительно текущего каталога%m - флаг модификации/изменения, выводит [+] если буфер изменялся%r - флаг " только для чтения", выводит [RO] если буфер только для чтения%h - флаг буфера помощи, выводит [help] если буфер со справкой vim%w - флаг окна превью, выводит [Preview]'\ ' - экранированный символ пробела. Пробел можно указывать только экранированным, иначе ошибка синтаксиса%y - тип файла в буфере, например [vim]enc: %{& enc} - отображение кодировки encoding (enc). Обратите внимание: " enc: " - текст, " %{& enc}" - вывод значения внутренней переменной (enc)ff: %{& ff} - отображение формата перевода строки fileformat (ff)fenc: %{& fenc} - отображение кодировки сохранения в файл fileencoding (fenc)%= - далее выравнивать вправоch: %3b - код символа под курсором в десятичной чистеме счисления, минимум 3 символаhex: %2B - код символа под курсором в шестнадцатеричной системе счисления, минимум 2 символаcol: %2c - курсор в колонке, минимум 2 символаline: %2l/%L - курсор в строке (минимум 2 символа)/всего строк в файле%2p - число % в строках, где находится курсор (0% - начало файла; 100% - конец файла), минимум 2 символа%% - т.к. символ '%' используется для переменных, то вывод символа '%' в строке статуса нужно делать особым образом - %%

 

Подробнее о формате вывода statusline можно узнать из справки:

: help statusline

 

 

Проверка орфографии[править]

 

Пользовательское меню[править]

 

Часто бывает удобно оформить процедуры, связанные с проверкой орфографии, в виде пользовательского меню:

set wildmenu

set wcm=< Tab>

" проверка орфографии:

menu SetSpell.ru: set spl=ru spell< CR>

menu SetSpell.en: set spl=en spell< CR>

menu SetSpell.off: set nospell< CR>

map < F7>: emenu SetSpell.< Tab>

" выбор альтернатив:

imap < F8> < Esc> z=< CR> i

map < F8> z=< CR>

 

 

Здесь, по < F7> вызывается подменю: проверить орфографию русского языка [ru], проверить орфографию английского языка [en] или отключить проверку орфографии [off].

 

По < F8> для слова под курсором можно найти корректную альтернативу из словаря. Порядок работы следующий:

Наводим курсор на выбранное слово (или подсвеченное проверкой орфографии слово)

Нажимаем < F8> и видим список альтернатив. Каждый вариант в списке помечен цифрой.

Находим понравившийся вариант и запоминаем его номер.

Смело начинаем набирать запомненный номер, неважно, одна это цифра или две.

Снова нажимаем < F8>.

Слово под курсором будет заменено альтернативой с указанным номером.

 

Последовательность: < F8> < одна-или-две-цифры> < F8>

 

Как это работает? [править]

 

Попробуйте на примере слова " Шпоргалка".

Откройте Vim, перейдите в режим редактирования и наберите слово " Шпоргалка".

Выйдите из режима редактирования в командный режим (обычно, < Esc> < Esc>)

Установите курсор на слово " Шпоргалка"

Нажмите последовательно два символа " z" и " =" (два символа: z=)

Как результат, вы должны увидеть экран с альтернативами, подобранными для слова под курсором. Нажатие любой клавиши скроет этот экран, но безопасными и не оставляющими следов в буфере клавиатуры будут либо < Esc> < Esc>, либо < Enter>.

Запоминаем, что хорошей альтернативой слову " Шпоргалка" было слово " Шпаргалка", под номером " 1".

А теперь магия! Нажимаем последовательно три символа: " 1", " z" и " =" (три символа: 1z=)

Слово под курсором " Шпоргалка" заменено на " Шпаргалка".

С использованием пользовательского меню, операция будет выглядеть, как три нажатия на кнопки: < F8> 1< F8>.

 

Теперь мы с вами знаем, что если навести на слово " Шпоргалка" курсор и нажать три магических символа 1z=, то ошибочное слово будет волшебным образом заменено на правильное (" Шпаргалка"). А если нажать четыре магических символа 39z=, то слово " Шпоргалка" под курсором будет волшебным образом заменено, скорее всего, на слово " Прогулка" (это если у вас стоят словари той же версии, что и у меня).

 

А теперь, самая главная тайна:

для того, чтоб все вышеуказанное работало,

проверка орфографии русского языка должна быть включена.

 

 

На всякий случай, напоминаю, что выход без сохранения изменений:

: q! < Enter>

 

 

Выход, с сохранением всех изменений:

: x< Enter>

<== предыдущая лекция | следующая лекция ==>
Организаторы конкурса | История создания КамАЗ-740
Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.261 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал