- переходы
- --
Для перехода на строку с номером n, воспользуйтесь командой G.
Так, для перехода к началу текста набирайте 1G (или gg), для сотой строки 100G, а для конца -- $G (или просто G).
Также можете использовать процентный переход.
Для середины файла, например, 50%.
Для перемещения по видимому участку экрана -- ``H'', ``M'', ``L''. ``<Ctrl>+F'' и ``<Ctrl>+B'' перемещают видимую область на экран, ``<Ctrl>+U'' и ``<Ctrl>+D'' на пол-экрана, ``<Ctrl>+E'' и ``<Ctrl>+Y'' на одну строку.
Команда ``zz'' перемещает видимую область так, чтобы текущая строка оказалась в середине, соответственно используются ``zt'' и ``zb''.
Для перехода на n символов в нужную вам сторону можете использовать клавиши со стрелками.
То есть для перехода на 1000 символов вниз наберите 1000 и нажмите стрелку вниз.
Для перемещения по тексту используйте следующие команды: ``w'' для перемещения по словам, ``(,)'' для перемещения по предложениям, ``{,}'' для параграфов, ``[[,]]'' для функций, ``%'' -- переход к парной скобке, ````'' -- к предыдущему положению, а ``<CTRL>-O, <CTRL>-I'' -- соответственно назад и вперед по истории переходов (всю историю можно просмотреть по :jumps)...
Если вы желаете выполнить какую-либо команду ViMнеоднокретно, используйте ``числокоманда''.
Так, для перемещения на 30 слов назад -- 30b.
Используйте команду ``fбуква'' для перемещения к нужному символу.
- метки
- -- Используются для отметки позиции (mметка, где меткой является любая буква) и быстрого к ней перехода (`метка).
Метки нижнего регистра действительны в пределах данного файла, метки же верхнего регистра действуют во всех открытых файлах.
Список всех меток можно получить командой marks.
- регистры
- -- Конечно же вам доступно множество именованных регистров (хранилищ данных, буферов).
Регистр отмечается ``"буква''. К нему применимы все стандартные действия -- копирование в него
("меткаy), вырезание ("меткаd), и вставка из него ("меткаp, можете вместо p использовать [p,]p для вставки соответственно перед, или после курсора).
В режиме редактирования вставка из регистра осуществляется по ``<Ctrl>+R метка''.
Для добавления данных в регистр используйте заглавную метку.
Также вы можете писать в регистр, воспользовавшись командой ``qметка'' и завершая запись по ``q''.
Таким образом вы сохраняете макрос, выполнить который можно по ``@метка'' (либо ``@@'' для последнего выполненного макроса).
Регистры с метками ``*'' и ``+'' совпадают с X-Window clipboards (первый с ``current selection'', куда попадает выделенный мышью текст, а второй с ``real clipboard'', куда текст попадает в результате операции копирования), ``%'' -- соответствует редактируемому файлу.
В режиме редактирования вставка из регистра осуществляется по ``<Ctrl>+r регистр''.
Для просмотра содержимого всех регистров воспользуйтесь командой :registers, либо :reg метка1метка2... для просмотра некоторых...
- фолды
- -- предназначены для сокрытия не нужных в данный момент данных, дабы те не отвлекали внимания.
Например, кода подпрограммы с которой вы в данный момент не работаете.
По умолчанию фолды активированы в режиме их ручной расстановки.
Если вы хотите их автоактивации по отношению к табуляции, то добавьте в конфиг строку set foldmethod=indent.
Все команды для работы с фолдами начинаются с ``z''.
Открытие фолда производится, например, по zo (или стрелке вправо) на нем, закрытие кода в фолд -- по zc...
- сессии
- -- при ведении группы проектов нередко желательно сохранить текущее состояния и настройки редактора, дабы в дальнейшем продолжить работу с того же места. Для этого и предназначены сессии, что создаются командой :mksession /path/to/Session.vim, а читаются простой командой :so /path/to/Session.vim.
Гораздо чаще, впрочем, возникает нужда в сохранении не всей сессии, но только контекста текущего окна (в что входит, например, положение курсора в коде, текущая расстановка фолдов и много другое, о чем читайте в документации).
Это действие выполняет команда :mkview, чтение -- :loadview.
Можно сохранять несколько видов одного окна.
Для этого используйте цифровые параметры к вышейуказанным командам.
Так, например, загрузка третьего представления -- :loadview 3.
Кроме того, представления можно сохранять в файлы, аналогично сессиям.
Очень удобно сделать сохранение и чтение контекста автоматическим при начале и окончании редактирования файла.
У меня это реализовано следующим кодом (применяется для всех файлов, имеющих точку в имени):
au BufWinLeave *.* mkview
au BufWinEnter *.* silent loadview
- восстановление
- -- иногда случается страшное.
Отключают электричество (а UPS мы, наученные горьким опытом, еще не купили), виснет операционка из-за проблем с железом...
А мы как раз набирали в ViMСамый Главный Файл и утратили уже инстинкт автосохранения (вот он главный вред надежности OS Linux :o)...
Что делать? Не паниковать.
Если вы сохраняли файл непосредственно перед крахом и данные были сброшены на диск, то средством восстановления данных можно и не пользоваться.
Но вот если файл давно не сохранялся, то дело другое.
ViMсоздавался исходя из реальных потребностей его пользователей (а не рассуждений менеджеров о target-аудитории и её потребностях) и конечно же и на этот случай вам постарается помочь.
При открытии файла после краха (если в это время от был открыт) ViM, после соответствующего вам вопроса (``а был ли крах?''), попытается восстановить файл в наиболее актуальном виде.
Это не означает, что будут восстановлены все ваши исправления файла с последнего сохранения.
Это дало бы слишком большую нагрузку на компьютер, если коммитить каждый символ.
Оные изменения ViMсбрасывает на диск каждые updatetime миллисекунд (по умолчанию 4000) и каждые updatecount символов (по умолчанию 200).
Соответственно рекомендуется сохранить восстановленный файл под другим именем и пройтись по оригинальному и восстановленному программой vimdiff.
Не забудьте после всех этих манипуляций удалить swap-файл ViM`а.
- шифрование
- -- не всегда мы хотим сделать свои творения всеобщим достоянием, для этого используется криптование файловой системы, каталогов, файлов...
ViMи в этом вам может помочь.
При создании нового файла запускайте ViMс ключем -x, либо используйте команду :X для уже существующего файла.
Снять защиту можно просто аннулировав ключ: :set key=.
- сплиты
- -- иногда бывает полезно работать одновременно с несколькими частами редактируемого файла.
Для этого воспользуйтесь командой :split (либо ``<Ctrl>+w s'') для горизонтального разделения, или :vsplit (либо ``<Ctrl>+w v'') для вертикального.
Переключаться между окнами можно мышью, либо по ``<Ctrl>+w w''.
Дополнительные окна можно закрыть командой :close (либо ``<Ctrl>+w c'').
Создать новое окно -- :new и :vnew (либо ``<Ctrl>+w n'').
Оставить текущее окно в гордом одиночестве -- :only (либо ``<Ctrl>+w o'').
- обработка текста
- --
Поиск осуществляется командами ``/'' для поиска (по регулярному выражению) вперед, а ``?'' в обратном направлении.
Для продолжения поиска используйте ``n'', а для прошлого варианта ``N''. Для поиска слова под курсором используются соответственно ``#'' и ``*''.
Для поиска с заменой используйте :%s/что/на что/gic, где ``%'' означает работу со всем текстом (а не с текущей строкой) ``g'' -- глобальная замена (а не первое совпадение), ``i'' -- игнорирование регистра, а ``c'' -- подтверждение каждого действия.
Также возможен поиск строк с применением к ним команды.
К примеру, команда ``:g+//+s/foobar/barfoo/g'' меняет ``foobar'' на ``barfoo'' во всех комментариях вида ``//''.
Кроме того любой участок текста (к примеру, выделенный) можно пропустить через внешнюю программу.
Так, например, командой ``:'<,'>|sort'' выделенный фрагмент сортируется.
- автодополнение
- --
Производится по содержимому данного файла, а также угазанных в переменной dictionary по нажатию клавиш ``<Ctrl>+n'' и ``<Ctrl>+p''.
- отмена
- -- ``u'' для отмены и ``<Ctrl>+R'' для отмены отмены...
- смена регистра
- -- ``~'' для выделенного участка (или буквы под курсором).
``U'' -- принудительно установить верхний регистр, а ``u'' соответственно нижний.
- перемещение текста
- -- команды ``<'' и ``>'' смещают выделенный текст на shiftwidth пробелов в соответствующую сторону.
- вставка файла
- -- осуществляется по команде ``:кудаread файл'', где ``куда'' обозначает номер строки, куда осуществлять вставку, либо опускается при ставке в текущую строку.
Совершенно аналогично осуществляется вставка результата работы команды.
К примеру, команда ``:read !date вставляет текущую дату...
- повторить
- -- ``.'' последнюю команду правки текста, ``;'' и ``,'' последний поиск (командами ``f'',``F'',``t'',``T'').