|
![]() Продвинутый редактор — кошмар для случайного пользователя. Если его удается в конце-концов закрыть, то вздыхаешь с облегчением и твердой уверенностью, что больше не будешь запускать эту программу ни в коем случае. Действительно, такой редактор нельзя просто открыть и начать работать — требуется предварительная подготовка. Зато стоит раз испытать его в работе, и поражаешься, как мог обходиться без него раньше. Главное отличие Vi от других редакторов в том, что у него несколько режимов работы. При этом привычный нам режим ввода текста — не основной. Вместо этого, в обычном режиме vi воспринимает каждое нажатие на клавишу, как команду. Это позволяет мгновенно перемещаться по файлу и быстро осуществлять редактирование. ![]() Насколько Vi быстрее других редакторов? — Давайте сравним. Например, вот действия, которые необходимо выполнить [«продвинутому»] пользователю, чтобы поменять местами две буквы в обычном редакторе и в vi: Обычный редактор:
Vi:
Переключение режимов «Обычный режим» — перемещение по файлу, стирание текста и другие редактирующие функции. Переход в него из любого другого режима:
«Режим ввода» — ввод текста. Заметьте, что стирание и ввод текста происходит в двух разных режимах. Переход в него из обычного режима:
«Командный режим» — Команды (операции с файлом, поиск и замена, настройка редактора…). Переход в него из обычного режима:
«Режим поиска» — ввод поискового запроса. Переход в него из обычного режима
«Визуальный режим» — режим выделения текста. Переход в него из обычного режима
Открыть/создать файл Опишем операции, которые можно производить с файлом.
Файл открывается в обычном режиме с помощью команды vi. Здесь мы можем просмотреть файл, переместиться по его содержимому, стереть текст, но ввести текст в этом режиме нельзя. Создание файла происходит при помощи той же команды. Собственно создание файла происходит в момент сохранения. Для открытия или создания нового файла в обычном режиме набираем
Перед этим нужно сохранить предыдущий файл
Перемещение по файлу Самые часто используемые в vi клавиши — клавиши перемещения. Это знаменитые h j k l, соответствующие стрелкам влево, вниз, вверх и вправо. Стрелочки тоже работают (при правильном указании терминала). Также можно использовать быстрые клавиши:
Редактирование файла Предположим в нашем файле записан следующий текст: — Винни, тебе что намазать на хлеб, мёду или сгущённого молока? — И того, и другого, и можно без хлеба! — Ну, если вы больше ничего не хотите… — А что, что-то есть ещё? Диалог симпатичный, но несколько несвязный. Давайте изменим его — для этого необходимо перейти в режим ввода. Самый простой способ — из обычного режима нажатие клавиши «i». После чего можно смело приступать к вводу текста.
Конечно, все сразу запомнить их трудно, даже не надо (к тому же здесь перечислены не все). Уверяю вас, через некоторое время эти команды будут пользоваться спросом. Наконец мы дошли к самому главному — командному режиму. Помним как в него перейти? «:». Шифт-ж если по-русски. Запись/выход Если вы в режиме ввода, то необходимо предварительно нажать
Эта команда может помочь, если файл открыт в режиме "read-only" (с опцией -R), если файл заблокирован другим пользователем, либо отсутствуют такие привилегии, либо еще какая беда. При попытке записи без «!» будет выдано соответствующее предупреждение.
Создать новый файл «new_file» и записать в него текущее содержимое. Если файл существует, будет показано предупреждение. Дальше вы продолжаете работать со старым файлом — mamapapa.txt
Если файл был изменен, у вас ничего не получится. В таких случаях необходимо добавлять после команды «!»:
Коэффициент повторения Почти все команды vi принимают так называемый коэффициент повторения. Попросту говоря, если перед командой в обычном режиме вы указываете число, то команда повторяется соответствующее количество раз. Например, команда «j» перемещает курсор на одну строку вниз — «3j» переместит курсор на 3 строки вниз. Результатом команды «iпривет Дополнительные возможности Есть несколько вещей, без которых редактирование похоже на пытку:
Vim Главные отличия от vi Неограниченное число undo/redo. (в 7-ой версии появились деревья) Многооконность. Поддержка множества буферов. (в 7-ой версии появились закладки) Подсветка синтаксиса. Редактирование командной строкой. Достраивание имен файлов. Визуальное редактирование. Кроссплатформенность. Графический интерфейс (GUI). Режим совместимости с vi. Проверка орфографии Команды Переход к началу файла в Vim отличается от Vi:
Переход к странице под номером
Перейти к следующему вхождению слова под курсором
Перейти к предыдущему вхождению слова под курсором
Перейти к определению слова под курсором
Перейти к редактированию файла (под курсором должен быть путь)
Визуальный режим Это существенное расширение возможностей Vi, без которого не обходится ни один «нормальный» текстовой редактор. Режим предназначен для выделения блока текста и дальнейшей работы с ним и состоит из 3-х последовательных шагов: * Пометка начала блока с помощью «v», «V» или CTRL-V. Блок помечается с того символа на котором находится курсор(по умолчанию). *Перемещение курсора в конец необходимого блока. Последний символ также будет включен в выделенный блок. *Вызов необходимой команды. Команда «v» предназначена для выделения текста посимвольно. Символы до и после курсора в строке не будут входить в выделение. Необходима в первую очередь для копирования участков текста в строке. «V» — для выделения текста построчно. CTRL-V — для выделения прямоугольного участка текста. Удобна в случае редактирования структурированного текста. С выделенным участком текста можно производить стандартные действия по редактированию(копирование — «y», удаление — «d»). Напомню, что в Vim при удалении участка текста, он автоматически помещается в специальный регистр, что равноценно «вырезанию» участка текста, который потом можно будет вставить с помощью команды «p»(вставка текста после курсора) или «P»(вставка текста перед курсором). Описание vimrc vimrc — это файл конфигурации Vim. При запуске Vim сначала читает этот файл и применяет записанные в нем настройки. Рекомендуемое расположение этого файла для различных платформ:
Файл конфигурации используется для настройки различных аспектов поведения и внешнего вида Vim. Комментарии в этом файле начинаются с символа " (двойная кавычка) и продолжаются до конца строки. Для примера приводится выдержка из файла _vimrc автора:
Можно добавить привычное поведение и привычные сочетания клавиш. Например, можно будет прокручивать (скроллить) текст колесиком мыши и вставлять выделенное в X`ах мышкой в Vim нажатием средней кнопки мыши (нажать на колесико мыши):
По
По
Также возможен интересный прием работы:
Эта команда вставит в текущую позицию редактируемого текста весь вывод указанной после "!" команды (в нашем случае: ls -la). По
По
По
Пользовательское меню. По
Пользовательское меню. По
Позволяет по Дополнительно Для получения более подробной информации по файлу _vimrc можно набрать в командной строке Vim команду
Vim и русская раскладка клавиатуры В обычном режиме Vim по умолчанию ожидает, что консоль находится в режиме ввода латинских символов. Если вы, к примеру, редактируете с помощью Vim текст на русском языке, или в смешанных кодировках (к примеру, HTML-страницу на русском), то постоянная необходимость переключать системную клавиатурную раскладку очень быстро вам надоест. Существует несколько способов решить эту проблему. Способ 1 Сделать так, чтобы русские буквы можно было вводить когда системная раскладка находится в режиме ввода латинских символов. Для этого в файл конфигурации Vim, который называется .vimrc (или _vimrc в Microsoft Windows) нужно добавить следующие строки:
После этого системную раскладку клавиатуры можно будет оставить в режиме ввода латинских символов, а переключение между языками осуществлять уже внутри самого редактора с помощью команды Ctrl+^ (Ctrl+6 в версии для Windows) Чтобы настроить переключение языков на другую кнопку (например на F12), можно использовать такие команды: для режима ввода символов:
При этом {ctrl-k} нужно вводить нажатием клавиш для режима ввода командной строки:
Кроме этого, в версии для Windows Vim по умолчанию не настроен на использование кодировок клавиатуры, содержащих символы кириллицы, например CP1251 и KOI8-R (в версии же для Linux настройка по умолчанию корректна). Как следствие этого, Vim при редактировании русского текста будет неправильно обрабатывать команды перемещения по тексту, основанные на поиске слова, такие как w (одно слово вперед), b (одно слово назад), * (найти в тексте слово под курсором) и т. п. Чтобы настроить Vim для корректной работы с этими командами независимо от языка, достаточно добавить в файл конфигурации _vimrc следующую строку:
Способ 2 Сделать так, чтобы Vim понимал, какие клавиши нажимаются, если включена русская раскладка. Для этого в .vimrc добавьте следующую строчку: Для стандартной раскладки (Windows, Linux):
Для раскладки Mac:
(Так как в Mac-раскладке символы под цифрами вводят другие символы, соответствующие английским, например, нажатие Shift+4 вводит "%" вместо "$", их не получится переназначить, поэтому способ 1 подходит лучше.) После этого Vim будет нормально понимать команды, вводимые при включенной русской раскладке. Если у вас локаль UTF, то данный способ не работает в старых версиях Vim. Необходимо каждый символ назначить индивидуально:
Возможно это зависит от версии, у меня работает так и причём в UTF:
Так как в последних версиях возможна проблема с парсером символа экранирования '\' - его необходимо записывать как '\\' перед специальными символами ',', ';', '"' и '\'. Потому в версии 7.3 правильная строка может быть такой:
Поиск в файлах с выводом в список В Microsoft Visual Studio (возможно и в других IDE тоже) есть очень удобная функция Find In Files. Она ищет заданную строку или регулярное выражение в файлах в заданной папке и выводит результат поиска в виде списка. Если щёлкнуть по строке этого списка то откроется файл в том месте где была найдена заданная строка. Подобная функция есть и в Vim. Чтобы найти в файлах нужную строку надо набрать команду:
Более конкретный пример:
Команда vimgrep ищет строку или регулярное выражение заключенное между символами // в файле или файлах и сбрасывает результаты в специальный буфер. А так же открывает файл с первым найденным результатом. Команда copen открывает буфер с результатами поиска. Путь к файлам может указывать как на один файл так и на набор файлов. Чтобы путь указывал на несколько файлов надо использовать символы ? и *. Значение этих символов такое же как и в командной строке операционной системы. Чтобы поиск прошел по всем подпапкам указанной папки можно использовать две звездочки **. Пример использования **:
может означать:
Как открыть файл в нужной кодировке Автоматически При открытии файла Vim попытается определить кодировку, и открыть файл в этой кодировке. Для этого, в ~/.vimrc:
К сожалению Vim не всегда удается определить кодировку файла правильно, и вместо осмысленного текста мы можем наблюдать крокозябры. Можно указать кодировку текста вручную Например, можно вручную указать кодировку cp1251 (MS Windows) уже открытому тексту:
Можно предварительно, перед открытием файла, указать ожидаемую кодировку Для этого нужно установить переменную encoding (сокращенно enc). Например, установить кодировку ucs-2le (unicode MS Windows):
После этого можно открывать файл. Он откроется в этой кодировке. Пользовательское меню Часто, для упрощения работы в Vim с файлами в различных кодировках, в ~/.vimrc определяют специальное пользовательское меню, которое будет вызываться, например, по
Перемещаться по пунктам пользовательского меню можно по Дополнительно Чтобы узнать список всех поддерживаемых кодировок, наберите команду:
Конвертация кодировки файла Vim автоматически пытается распознать текущую кодировку открываемого файла, отображает открываемый файл в кодировке отображения терминала, а при сохранении конвертирует в кодировку сохранения файла. Текущая используемая в Vim кодировка задается переменной encoding (enc). Кодировка отображения задается переменной termencoding (tenc). Кодировка сохранения файла задается переменной fileencoding (fenc). Кодировка файла encoding определяется при его открытии или берется из настроек системы. При отображении, Vim производит трансляцию текущей кодировки encoding в кодировку отображения termencoding. При сохранении в файл Vim конвертирует из текущей кодировки encoding в кодировку сохранения fileencoding. Обычно encoding и fileencoding совпадают. Для того, чтобы сохранить файл в другой кодировке, надо перед сохранением задать соответствующее значение переменной fileencoding. Чтобы узнать список всех доступных значений переменных encoding и fileencoding наберите команду:
Пример: как сконвертировать файл из MS Windows cp1251 в Linux utf-8 Открываем файл в Vim:
Задаем текущую кодировку cp1251:
Текст конвертируется и Vim отобразит изменения, если они произошли. Исходный файл не изменился. Задаем кодировку сохранения файла utf-8:
Задаем формат переводов строки (dos, unix или mac):
Сохраняем файл.
Выходим
Пример: конвертировать файл из Linux utf-8 в MS Windows cp1251 Обратная операция — конвертировать файл из Linux utf-8 в MS Windows cp1251 — будет такой:
Vim при переводах текста, или для чтения английской документации Итак, чтобы можно было успешно читать и переводить документацию на английском языке, нужно ИМХО всего 3 вещи: Редактор. Переводчик. Проверка орфографии Если их удобно объединить, то можно получить хорошую среду, для перевода/чтения. Что возьмем Редактор мы естественно возьмем VIM хотя бы потому что статья так называется. Переводчик mueller консольная версия, работает так:
И орфографмометр: это spell в виме, словари скачаем с vim.org Как настроим Мне интересна возможность выпадающего списка, при наведением на неизвестное мне слово мышкой. Для этого, после долгого чтения манов (или гугленья) узнаем что с помошью команды system можно выполнить какое-то действие, вывод которой куда-либо записать. Короче, пишем где-нибудь в ~/.vimrc
Определили функцию MyBallonExpr которая будет формировать строку mueller [слово на которое навели] и выполнять. Результат выполнения будет выдавать в «балоне» выпадающем окошке, через 100 миллисекунд. Естественно вместо mueller вы можете поставить любую другую программу, которая переводит текст. Рецепт для оч.умелых ручек Если у вас нет консольной версии mueller, но есть много энтузиазма, то можно поступить так: Идем на www.sourceforge.net и забираем оттуда mueller-dict-3.1.1.tar.gz Извлекаем из полученного архива файл mueller-base.dict.dz и кладем его, скажем, в ~/dict/ Там же создаем файл mueller-base.sh со следующим содержимым:
даем нашему новому консольному словарику право на исполнение:
и проверяем его работоспособность:
теперь функция перевода в нашем ~/.vimrc должна будет выглядеть так:
Примечание: LINES=50 ограничивает количество выводимых строчек. Можете подобрать цифру под свой монитор. Рекомендую выставить balloondelay=500 миллисекунд. Да, помедленнее. Но мышка меньше будет цепляться за слова. Естественно, что функция работает только в gVim. Наведите курсор мышки на слово и оставьте его неподвижным секунду-две (поначалу, можно вообще убирать руку с мышки, позже приловчитесь). Проверка орфографии Пользовательское меню Часто бывает удобно оформить процедуры, связанные с проверкой орфографии, в виде пользовательского меню:
Здесь, по По Наводим курсор на выбранное слово (или подсвеченное проверкой орфографии слово) Нажимаем Находим понравившийся вариант и запоминаем его номер. Смело начинаем набирать запомненный номер, неважно, одна это цифра или две. Снова нажимаем Слово под курсором будет заменено альтернативой с указанным номером. Последовательность: Как это работает? Попробуйте на примере слова "Шпоргалка". Откройте Vim, перейдите в режим редактирования и наберите слово "Шпоргалка". Выйдите из режима редактирования в командный режим (обычно, Установите курсор на слово "Шпоргалка" Нажмите последовательно два символа "z" и "=" (два символа: z=) Как результат, вы должны увидеть экран с альтернативами, подобранными для слова под курсором. Нажатие любой клавиши скроет этот экран, но безопасными и не оставляющими следов в буфере клавиатуры будут либо Запоминаем, что хорошей альтернативой слову "Шпоргалка" было слово "Шпаргалка", под номером "1". А теперь магия! Нажимаем последовательно три символа: "1", "z" и "=" (три символа: 1z=) Слово под курсором "Шпоргалка" заменено на "Шпаргалка". С использованием пользовательского меню, операция будет выглядеть, как три нажатия на кнопки: Теперь мы с вами знаем, что если навести на слово "Шпоргалка" курсор и нажать три магических символа 1z= ,то ошибочное слово будет волшебным образом заменено на правильное ("Шпаргалка"). А если нажать четыре магических символа 39z= ,то слово "Шпоргалка" под курсором будет волшебным образом заменено, скорее всего, на слово "Прогулка" (это если у вас стоят словари той же версии, что и у меня). А теперь, самая главная тайна: для того, чтоб все вышеуказанное работало, проверка орфографии русского языка должна быть включена. На всякий случай, напоминаю, что выход без сохранения изменений:
Выход, с сохранением всех изменений:
Оказывается, меню и панель инструментов в GVIM можно включать и отключать. Очень удобно, особенно если у вас маленький экран. Например - у меня нетбук, и экранное пространство - большой дефицит. Поэтому мне очень было приятно узнать, что в vimrc можно добавить такую команду:
Эта команда увязывает комбинацию клавиш с включением и выключением меню и панели инструментов в GVIM. Более подробно об опции guioptions можно прочитать здесь:
Но это еще не все! Оказывается, можно самому создавать свои меню и свои панели инструментов. Например, в качестве примера я реализовал переключение между табами, а также их удалению. Вообще, для переключения используются команды tabnext, tabprevious и tabclose. Однако поскольку у меня стоит MiniBufExplorer, то у меня в итоге получилось в vimrc следующее:
Здесь
В результате после запуска GVIM у меня в меню появился раздел Tabs, а в нем - строки "Удалить", "Следующий" и "Предыдущий", с помощью которых мне удалось попереключаться между табами и потом закрыть некоторые из них. Правда, я не смог ответить себе на вопрос - могу ли я как-нибудь реализовать в меню следующую команду:
где
Но у меня ничего не получилось - GVIM выводит в командной строке :b, но ведь надо еще ввести номер. У меня это не получилось. Вероятно в этом месте надо писать некий диалог с пользователем через окошко, где он может ввести этот номер. Слишком сложно для эксперимента (да к тому же я еще не умею), поэтому эту команду я вырубил. пока все... Собственно, по панели инструментов оказалось слишком мало информации, чтобы создавать отдельный пост. Поэтому добавлю здесь же. Вы можете провести такой эксперимент. Выберите какую-нибудь иконку, создайте внутри папки ~/.vim папку icons (или другую папку, какую хотите) и поместите туда вашу иконку. Затем откройте ~/.vimrc и введите туда следующее:
Здесь вы используете команду amenu, указывая в первом аргументе icon путь к вашей иконке, а во втором аргументе устанавливаете команду, которая будет выполнена при нажатии на вашу кнопку. Обратите внимание на ключевое слово Toolbar - оно определяет, что вы желаете разместить команду именно на панели инструментов, а не в меню. Далее, закройте и откройте GVIM, и вы увидите в ряду ваших кнопок на панели, в самом конце, свою иконку. Нажмите ее, и она выведет вам информацию о всех активных буферах..
Суть их очень простая. Команда imap работает в режиме вставки (первая буква i - от слова Insert) и позволяет назначать выполнение команд при нажатии определенных клавиш. Первая строка обозначает, что при нажатии клавиши "[" нужно написать два символа [] и сымитировать нажатие клавиши "влево". То есть при нажатии на клавишу [ вместо открывающейся скобки будет вставлена также и закрывающаяся, а курсор затем переместится на один символ влево, то есть окажется внутри скобок. Аналогично работают и следующие две строки, только для круглых и фигурных скобок соответственно. Если вам не нравится раскраска кода по умолчанию, то ее можно переключать. Шаблоны с раскрасками лежат в папке X:\Program Files\Vim\vim72\colors и (или) X:\Program Files\Vim\vimfiles\colors Самое главное, что вы можете переключать раскраску во время работы, а затем установить ее по умолчанию. Для этого в команднйо строке vim вводим команду, например,
blue - это имя одного из файлов (без расширения) в папке colors. В итоге получим: ![]() Чтобы установить ту же цветовую схему blue по умолчанию, в файл _vimrc добавляем строку:
или color _имя_понравившейся_вам_цветовой_схемы К данному моменту сразу будет работать и автодополнение (в Vim они называются Omni Completion). Чтобы появились подсказки, нужно в режиме вставки поочередно нажать Ctrl-X, Ctrl-O. Выглядят они следующим образом: Но чтобы было более привычно, как в других IDE, мы можем сделать так, чтобы Omni Completion появлялся при нажатии комбинации клавиш Ctrl-пробел. Для этого в _vimrc добавим всего одну строчку:
С помощью этой команды мы перенаправляем сочетание клавиш Ctrl-пробел на последовательное нажатие комбинаций клавиш Ctrl-x, Ctrl-o. В принципе, можно было бы воспользоваться уже знакомой нам командой imap, но отличие команды inoremap состоит в том, что при ее использовании, в отличие, от imap, отключается дальнейшие перенаправления клавиш, которые указываются во втором параметре. Теперь можно сделать так, чтобы текущий буфер закрывался с помощью клавиши Ctrl-W.
Первая строка изменяет поведение Ctrl-w в нормальном режиме и при нажатии этой комбинации вызывает команду закрытия буфера (:bd) Вторая команда работает аналогично для режима вставки, только предварительно имитирует нажатие клавиши Esc для выхода в нормальный режим, а затем выполняет ту же команду. На этом первое знакомство c VIM можно и закончить: не предп |
|
![]() |
Дизайн и программирование - Balandin Ivan |
![]() |
© 2009-2011 Юникс-Про.ру
|