Первая задача
Итак получаем первую задачу по проекту. Какой-то функционал ведет себя совсем не так, как должен, и то и вовсе падает с ошибкой. Приступаем. Скорость навигации по каталогам в поисках нужных файлов будет примерно одинаковой потому, что файловый менеджер — он и в Африке файловый менеджер, однако в PhpStorm он уже есть, а для vim снова нужен плагин. И вновь мы тратим драгоценные минуты на установку необходимого функционала.
Если в процессе работы мы встретим в legacy-код, то для начала его надо хоть как-то бы привести в читаемый вид. В IDE придется исполнить аккорд на клавиатуре , однако в этом вопросе vim отличается только аккордом. Точнее у него их несколько.
В IDE, благодаря умному анализу кода, ничего особенного не предпринимая, мы сразу увидим какие переменные не используются, какие циклы окажутся вечными, какие условия никогда не изменятся, а значит мы увидим большинство проблемных мест, просто открыв файл. Vim же предлагает нам внимательно вникать в каждую строчку и и выискивать все самостоятельно, проявляя весь свой талант разработчика. Сколько уйдет на это времени и насколько сильно утомится разработчик от такой работы сказать сложно. Видимо именно из-за этого перенос рук с клавиатуры на мышь сбивает vim-овцев c мысли.
Что мы имеем? Мы еще не написали ни одной строчки кода, а разработчик, использующий vim уже потратил ощутимое количество своего ресурса.
На этапе рефакторинга пользователь vim столкнется с непреодолимыми проблемами. Он не сможет одной кнопкой провалиться в конкретный метод или класс, не сможет быстро переименовать что-то, что используется больше чем в одном месте. Если что-то будет удаляться, vim не подскажет ему, что этот файл используется в другом месте и удаление может поломать систему еще больше. Не узнает он и о том, что и переименование может потянуть за собой цепочку ошибок в других местах.
А если что-то пошло не так? Сможет ли пользователь vim откатиться по локальной истории и вернуть все взад? Или предлагаете коммитить построчно?
А что если мы разрабатываем интерфейс API и нам нужно покидать на него запросы и посмотреть какие приходят ответы? Без проблем — в IDE есть встроенный HTTP-клиент и мы можем баловаться с запросами так, как захотим, а что предлагает нам vim-комьюнити? Использовать штатный консольный клиент операционной системы? Но для этого мы вновь вынуждены покинуть рабочее окружение. И пока ведется разработка, мы так и будем скакать из одного окружения в другое.
Строка статуса редактора
Строка статуса редактора бывает очень полезна, если вам не жалко пары строчек на экране. Добавьте в :
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\
…и у вас в предпоследней строке будет выводиться что-то вроде этого:
.vimrc enc:utf-8 ff:unix fenc:utf-8 (ch: 92 hex:5C) col:26 line:158/168
Комментарий:
— имя файла и путь к нему, относительно текущего каталога
— флаг модификации/изменения, выводит если буфер изменялся
— флаг «только для чтения», выводит если буфер только для чтения
— флаг буфера помощи, выводит если буфер со справкой vim
— флаг окна превью, выводит
— экранированный символ пробела. Пробел можно указывать только экранированным, иначе ошибка синтаксиса
— тип файла в буфере, например
— отображение кодировки ()
Обратите внимание: «» — текст, «» — вывод значения внутренней переменной ()
— отображение формата перевода строки ()
— отображение кодировки сохранения в файл ()
— далее выравнивать вправо
— код символа под курсором в десятичной чистеме счисления, минимум 3 символа
— код символа под курсором в шестнадцатеричной системе счисления, минимум 2 символа
— курсор в колонке, минимум 2 символа
— курсор в строке (минимум 2 символа)/всего строк в файле
— число % в строках, где находится курсор (0% — начало файла; 100% — конец файла), минимум 2 символа
— т.к. символ ‘%’ используется для переменных, то вывод символа ‘%’ в строке статуса нужно делать особым образом —
Подробнее о формате вывода можно узнать из справки:
:help statusline
Как использовать Vim в визуальном режиме
Использование vim в визуальном режиме позволяет нам выделять блоки текста с помощью клавиш перемещения. Вот как опытные пользователи перемещают блоки кода в vim. Введите v в обычном режиме, чтобы переключиться в визуальный режим.
Теперь вы можете выделять фрагменты текста или кода с помощью навигационных клавиш hjkl . Используйте Ctrl + v для переключения в режим визуального блока. Здесь вы можете выделить блоки текста. Вы можете выделить линии, перейдя в режим визуальных линий. Используйте V для выбора режима визуальной линии.
Это позволяет нам вносить изменения в блок текста сразу. Например, вы можете выбрать текстовый блок и нажать y, чтобы скопировать текст в буфер vim.
Как использовать Vim в нормальном режиме
Пользователи Vim большую часть времени проводят в обычном режиме. Здесь вы можете перемещаться по текстам и выполнять быстрое редактирование. Нажатие клавиши выхода <ESC> из любого режима вернет вас в нормальный режим.
Вместо стандартных клавиш со стрелками vim использует hjkl ( h для левого, j для вниз, k для вверх и l для правого) для навигации. Поначалу это может показаться контрпродуктивным. Но vim делает это, чтобы сэкономить время, необходимое пользователям для нажатия клавиш со стрелками на клавиатуре.
Кроме того, как и многие консольные редакторы, vim рекомендует пользователям держаться подальше от мыши. Однако вы можете настроить vim для включения поддержки мыши.
Вы также можете перемещаться по тексту пословно. Например, нажатие w в обычном режиме перемещает курсор в начало следующего слова. Вы можете перейти к началу текущего слова с помощью b и закончить с помощью e .
Используйте для перехода к началу строки и $ для перехода к концу. Нажатие H перемещает курсор в верхнюю часть экрана, M – в середину, а L – в нижнюю часть. Вы можете прокручивать вверх и вниз, используя Ctrl + u и Ctrl + d . Если вы нажмете gg в обычном режиме, vim переместит курсор наверх. Введите G, чтобы перейти в конец.
Вы можете изучить команды редактирования vim, как только почувствуете себя комфортно в обычном режиме. Используйте x для удаления символа, s для замены. Вы удаляете тексты с помощью оператора d . В качестве аргумента он принимает движение. Синтаксис для этого показан ниже.
Движение может быть любым. Например, нажатие dw в обычном режиме удаляет текущее слово. Если вы наберете d $ , vim удалит все до конца строки. Аналогичным образом, ввод d0 удаляет до начала строки. Используйте dd для удаления всей строки.
Однако вам не нужно что-то удалять и переходить в режим замены для внесения изменений. Оператор c позволяет нам вносить изменения в движение vim прямо из нормального режима.
Итак, когда вы нажимаете cw , vim удаляет текущее слово и переводит вас в режим вставки. Курсор должен находиться в начале слова, поскольку vim удалит его из текущей позиции. Используйте ciw, чтобы обойти это. Это вносит изменения в текущее слово. Используйте cc для изменения всей строки.
Используйте y для копирования движений и p для их вставки. Итак, yw копирует текущее слово, а yy копирует всю строку. Вы можете повторить предыдущую команду, используя точку . , отмените изменения с помощью u и повторите их с помощью Ctrl + r .
Если вы хотите найти что-то в своем коде, используйте следующую команду vim в Linux.
Здесь regex – это регулярное выражение. Нажмите n, чтобы перейти к следующему совпадению, и N, чтобы перейти к предыдущему совпадению.
Минимальные основы
На данный момент существует две версии редактора — vi и vim. Vim расшифровывается как Vi Improved, улучшенный vi. Это новая версия, которая принесла очень много улучшений. В большинстве современных дистрибутивов используется именно она. Поэтому если я буду писать vi, это значит, что я предполагаю использование vim.
Текстовый редактор Vim может работать в двух режимах. Это и есть его главная особенность. Первый режим, который используется по умолчанию при открытии редактора — это командный. В этом режиме вы можете вводить команды vi, а также использовать символьные клавиши для управления редактором. Второй режим — обычное редактирование текста, он работает так же как и редактирование текста в nano. Для переключения в командный режим используется клавиша Esc. Для переключения в режим редактирования — клавиша i. Если вас интересует только как в редакторе vi сохранить и выйти, листайте вниз, но если вы хотите узнать как пользоваться текстовым редактором vim, эта статья для вас.
Перед тем как идти дальше я бы посоветовал вам пройти курс обучения встроенный в редакторе. Выполнение всех обучающих заданий займет 25-30 минут. Но после того как вы освоите все что там написано, эта статья поможет вам закрепить материал. Дело в том, что команд и сочетаний клавиш у vim очень много и запомнить их все без практики невозможно. Для запуска обучения наберите:
Но делать это сейчас необязательно, в этой статье есть вся необходимая базовая информация и после ее прочтения вы уже сможете уверенно пользоваться vim, а обучение пройти чуть позже.
Проверка орфографии
Пользовательское меню
Часто бывает удобно оформить процедуры, связанные с проверкой орфографии, в виде пользовательского меню:
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>
Здесь, по вызывается подменю: проверить орфографию русского языка [], проверить орфографию английского языка [] или отключить проверку орфографии [].
По для слова под курсором можно найти корректную альтернативу из словаря. Порядок работы следующий:
Наводим курсор на выбранное слово (или подсвеченное проверкой орфографии слово)
Нажимаем и видим список альтернатив
Каждый вариант в списке помечен цифрой.
Находим понравившийся вариант и запоминаем его номер.
Смело начинаем набирать запомненный номер, неважно, одна это цифра или две.
Снова нажимаем .
Слово под курсором будет заменено альтернативой с указанным номером.. Последовательность:
Последовательность: <одна-или-две-цифры>
Как это работает?
Попробуйте на примере слова «Шпоргалка».
- Откройте Vim, перейдите в режим редактирования и наберите слово «Шпоргалка».
- Выйдите из режима редактирования в командный режим (обычно, )
- Установите курсор на слово «Шпоргалка»
- Нажмите последовательно два символа «» и «» (два символа: )
- Как результат, вы должны увидеть экран с альтернативами, подобранными для слова под курсором. Нажатие любой клавиши скроет этот экран, но безопасными и не оставляющими следов в буфере клавиатуры будут либо , либо .
- Запоминаем, что хорошей альтернативой слову «Шпоргалка» было слово «Шпаргалка», под номером «».
- А теперь магия! Нажимаем последовательно три символа: «», «» и «» (три символа: )
- Слово под курсором «Шпоргалка» заменено на «Шпаргалка».
- С использованием пользовательского меню, операция будет выглядеть, как три нажатия на кнопки: .
Теперь мы с вами знаем, что если навести на слово «Шпоргалка» курсор и нажать три магических символа ,то ошибочное слово будет волшебным образом заменено на правильное («Шпаргалка»). А если нажать четыре магических символа ,то слово «Шпоргалка» под курсором будет волшебным образом заменено, скорее всего, на слово «Прогулка» (это если у вас стоят словари той же версии, что и у меня).
А теперь, самая главная тайна:
для того, чтоб все вышеуказанное работало, проверка орфографии русского языка должна быть включена.
На всякий случай, напоминаю, что выход без сохранения изменений:
:q!<Enter>
Выход, с сохранением всех изменений:
:x<Enter>
Как работает Vim?
Vim отличается от традиционных текстовых редакторов Linux . Он поддерживает философию Unix: делать одно и делать все правильно. Основная идея состоит в том, что как программисты мы тратим большую часть времени на редактирование кода, а не на его написание.
Vim предоставляет несколько режимов для решения этой проблемы. Каждый режим делает что-то свое и управляется нажатием клавиш. Основные режимы vim – это нормальный режим, визуальный режим, режим вставки и командный режим.
Мы используем обычный режим для просмотра кода и выполнения быстрых операций. Визуальный режим используется для выделения текстовых разделов, а режим вставки – для добавления текста. Вы будете использовать командный режим для ввода различных команд vim.
Особенности и улучшения по сравнению с vi [ править ]
Vim имеет режим совместимости с vi, но когда этот режим не используется, Vim имеет много улучшений по сравнению с vi. Однако даже в режиме совместимости Vim не полностью совместим с vi, как определено в спецификации Single Unix и POSIX (например, Vim не поддерживает открытый режим vi, только визуальный режим). Разработчики Vim заявляют, что он «полностью совместим с Vi».
Файловый менеджер внутри vim
Некоторые из улучшений Vim включают завершение , сравнение и объединение файлов (известное как vimdiff), комплексную интегрированную справочную систему, расширенные регулярные выражения , языки сценариев (как собственные, так и через альтернативные интерпретаторы сценариев, такие как Perl, Python, Ruby, Tcl и т. Д.) ), включая поддержку плагинов , графический интерфейс пользователя (известный как gvim), ограниченные возможности интегрированной среды разработки , взаимодействие с мышью (как с графическим интерфейсом пользователя, так и без него), свертывание , редактирование сжатых или заархивированных файлов в gzip , bzip2, zip и tar , а также файлы по сетевым протоколам, таким как SSH , FTP и HTTP , сохранение состояния сеанса, проверка орфографии , разделение (горизонтальное и вертикальное) и окна с вкладками, поддержка Unicode и других языков, подсветка синтаксиса , перевод команда сеанса, история поиска и положения курсора , многоуровневая и ветвящаяся история отмены / повтора, которая может сохраняться в сеансах редактирования, и визуальный режим.
Во время работы Vim сохраняет изменения пользователя в файле подкачки с расширением «.swp» . Файл подкачки можно использовать для восстановления после сбоя. Если пользователь пытается открыть файл, а файл подкачки уже существует, Vim предупредит пользователя, и, если пользователь продолжит, Vim будет использовать файл подкачки с расширением «.swo» (или, если уже существует более одного файл подкачки, «.swn», «.swm» и т. д.). Эту функцию можно отключить.
: команда версии отображает флаги компиляции (поддерживаемые функции)
Интерфейс [ править ]
Графический Vim (gVim) под GTK + 2 .
Код вверху ( Go ), открытые файлы, регистры («менеджер буфера обмена» и история макросов)
Как и vi , интерфейс Vim основан не на меню или значках, а на командах, заданных в текстовом пользовательском интерфейсе ; его режим графического интерфейса , gVim , добавляет меню и панели инструментов для часто используемых команд, но полная функциональность по-прежнему выражается через режим командной строки . Vi (и, как следствие, Vim) имеет тенденцию позволять машинистке держать пальцы в главном ряду , что может быть преимуществом для машинистки слепым методом .
В Vim есть встроенное руководство для начинающих под названием vimtutor. Обычно он устанавливается вместе с Vim, но существует как отдельный исполняемый файл и может запускаться с помощью команды оболочки. Существует также руководство пользователя Vim , в котором подробно описаны функции Vim и ответы на часто задаваемые вопросы . Это руководство можно прочитать в Vim или найти в Интернете.
Vim также имеет встроенную справку (с помощью команды), которая позволяет пользователям запрашивать и перемещаться по командам и функциям.
Поиск (grep) внутри Vim по файлам на диске без плагинов
Режимы править
Vim имеет 12 различных режимов редактирования, 6 из которых являются вариантами 6 основных режимов. Основные режимы:
- Нормальный режим — используется для команд редактора. Это также режим по умолчанию, если не указан параметр.
- Визуальный режим — аналогичен обычному режиму, но используется для выделения областей текста. Обычные команды запускаются в выделенной области, которую, например, можно использовать для перемещения или редактирования выделения.
- Выбрать режим — работает аналогично визуальному режиму. Однако, если вводится печатаемый символ, возврат каретки или новая строка (или перевод строки), Vim вставляет символ и запускает режим вставки.
- Режим вставки — аналогично редактированию в большинстве современных редакторов. В режиме вставки буферы могут быть изменены с вставленным текстом.
- Режим командной строки или Cmdline — поддерживает однострочный ввод в нижней части окна Vim. Обычные команды (начинающиеся с ) и некоторые другие конкретные буквы, соответствующие различным действиям (включая поиск по шаблону и команду фильтрации), активируют этот режим.
- Режим Ex — аналогично режиму Cmdline, он принимает однострочный ввод в нижней части окна. Однако в режиме Cmdline ввод команды выходит из режима при выполнении команды. Ввод команды в режиме Ex не приводит к изменению режима.
История команд ниже: мы можем редактировать каждую команду и / или запускать ее снова
Шаг 4. Установим плагины и настроим их
Полным списком своих плагинов делиться не буду: ты сам с легкостью найдешь все нужное тебе запросами типа . Вместо этого приведу общие, которые будут полезны для переходящего с Sublime или Atom.
nerdtree
Это боковая панель с файловой структурой проекта. Аналог Sidebar в Sublime или Atom. Все привычно — выбираешь файл, открываешь его нажатием на Enter в нужном буфере. Можно установить каталог, от которого плясать.
Из полезных трюков предлагаю замапить открытие и скрытие этой панельки по + :
Показывать скрытые файлы по умолчанию:
Включать NERDTree для всех табов:
CtrlP
Плагин для быстрого перехода к нужному файлу в проекте по его названию. Ищет не только полное соответствие, старается найти все файлы, в пути которых встречается введенная последовательность символов.
Нажимаешь + , вводишь , и плагин находит файл .
indentLine
Плагин рисует линии отступа в коде, помогая отслеживать вложенность. Раньше я использовал vim-indent-guides, но его глюки меня порядком достали. Плагин indentLine работает вроде бы получше.
Из полезных настроек предлагаю выставить символ отступа:
Дефолтный «крокодил» уж больно отвлекает внимание
vim-startify
Плагин добавляет удобный стартовый экран для твоего Vim. На нем можешь выбрать последние открытые файлы, перейти к проекту (в терминологии Vim — session).
Из полезностей нелишним будет добавить следующие строки:
Это заставит vim-startify нормально работать вместе с NERDTree.
vim-easy-align
Отличный плагин для быстрого выравнивания блоков кода по символам. Другими словами, чтобы из
быстро сделать
В наличии регулярки, безумный синтаксис и целая страница с примерами команд выравнивания кода для разных языков
Обрати внимание на строки из start guide:. Первая запускает EasyAlign в интерактивном режиме по (например, ), вторая — то же самое для блока ()
Первая запускает EasyAlign в интерактивном режиме по (например, ), вторая — то же самое для блока ().
Goyo и удобное написание текстов
Хороший помощник для тех, кто много пишет. Плагин убирает все лишние панели, индикаторы и центрирует текст, позволяя сфокусироваться на создании контента. По сути, это реализация distraction-free mode, вокруг которой даже делали отдельные текстовые редакторы вроде ommwriter.
Я забиндил переключение в этот режим по + в . По дороге отключается все, что не нужно, и включаются нужные опции:
Вообще, для файлов в формате Markdown у меня автоматически включаются такие настройки:
vim-airline
Must-have-панель со статусной информацией по текущему открытому файлу. Наверняка ты видел ее в большинстве скриншотов Vim в интернете — плагин очень популярен. Панель интерактивная, показывает текущий режим работы, раскладку, кодировку, позицию курсора в файле, строке и многое другое.
Также советую глянуть проект-сателлит vim-airline-themes. Это коллекция тем для vim-airline, которая позволяет твоей статусной строке органично вписываться в основную цветовую схему редактора.
Выводы
Vim нельзя воспринимать как просто еще один текстовый редактор. Это нечто сродни командной строке Unix. Те, кто не умеет ее использовать, считают командную строку анахронизмом. Те, кто умеет и знает, используют ее постоянно и выполняют свои задачи намного быстрее людей, предпочитающих графический интерфейс.
Как и у командной строки, у Vim очень высокий порог вхождения. Его нельзя просто запустить и начать использовать. Сначала ты должен понять, как он работает, на каких принципах базируется и почему он именно такой, какой есть. Затем тебе придется заучить множество команд, попрактиковаться, набить руку — только тогда Vim станет для тебя действительно удобным, и ты уже не променяешь его ни на какой другой редактор.
- Нужно ли тебе это? Зависит от того, насколько часто ты работаешь с текстовыми данными: пишешь статьи, код, редактируешь HTML. Vim может сделать эту работу намного более эффективной. При этом навыки пригодятся и при работе в других программах — плагины с режимом Vim есть почти для всех популярных сред разработки. Я, к примеру, использую плагин IdeaVim в Android Studio. Он позволяет получить мощь команд Vim, не отказываясь от богатых возможностей среды Idea.
:wq!
Поиск и замена в Vim
Довольно часто нам нужно найти определенную последовательность в тексте. Текстовый редактор Vim умеет это делать.
Во-первых, если нужно найти символ в строке, нажмите f и наберите нужный символ, курсор будет перемещен к его позиции.
Для поиска по всему файлу используйте команду /. После нее нужно ввести слово, которое нужно найти. Для поиска следующего вхождения используйте n, для предыдущего — N.
Для замены будет использоваться немного другая конструкция:
Двоеточие запускает командную оболочку с командой s для замены. Символ % означает что обрабатывать нужно весь файл, а g значит, что нужно обработать все найденные строки, а не только первую. Чтобы программа спрашивала перед каждой заменой можно добавить в конец строки опцию c.
Шаг 1. Выберем эмулятор терминала с GPU-ускорением
Часто тормоза и глюки Vim связаны с терминалом, в котором ты его запускаешь. Если у тебя macOS, не мучайся с системным, ставь сразу MacVim или запускай в iTerm2.
Еще лучше попробовать Alacritty. Это быстрый, написанный на Rust, кросс-платформенный терминал, который эффективно работает с GPU. Он позволяет рендерить графику гораздо быстрее, чем любой из существующих аналогов. Из непривычностей — все настройки хранятся в текстовых файлах, да и управление окном придется допиливать самому. Например, в macOS не работает CMD + H, так что окно шоткатом из коробки не спрятать.
Далее я буду приводить скриншоты из standalone-версии MacVim, но суть не изменится.
История [ править ]
Предшественник Vim, Стиви (редактор ST для энтузиастов VI) , был создан Тимом Томпсоном для Atari ST в 1987 году и развит Тони Эндрюсом и GR (Фредом) Уолтером.
Основываясь на своей работе над Стиви, Брэм Мооленаар начал работу над Vim для компьютера Amiga в 1988 году, выпустив первый общедоступный выпуск (Vim v1.14) в 1991 году. [ нужен лучший источник ]
Во время его первого выпуска название «Vim» было аббревиатурой от «Vi IMitation», но в конце 1993 года оно было изменено на «Vi IMproved» .
История выпуска | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
ВЫВОД
А вывод вы и сами видите. Я еще раз хочу сказать, что это просто тест, и мы не работаем постоянно с такими файлами. Ну а что, если вам когда-нибудь в жизни хоть раз придется это делать?
Этот тест просто показывает одно. Все современные редакторы/IDE написаны на слишком высокоуровневых языках. С использованием слишком тяжелых фреймворков и библиотек. В современной реальности все считают, что время разработки намного важнее, чем скорость работы программы. И мы имеем то, что имеем.
Программа отжирает невероятное количество оперативной памяти, процессорного времени, но при этом нещадно тормозит и не способна справится с задачами.