Xgu.ru теперь в Контакте  — приходите и подключайтесь.
Пока мы работаем над следующими видео, вы можете подключиться в Контакте. Познакомимся и обсудим новые страницы и ролики.

Vk-big.pngYoutube-big.jpeg

Vim

Материал из Xgu.ru

Перейти к: навигация, поиск


Вот так выглядела клавиатура создателя vi. Обратите внимание, где находятся стрелки и где находится Esc

Vim (VI Improved) — текстовый редактор, идеологическое продолжение текстового редактора vi. Отличительная особенность редактора (как и редактора vi) — поддержка режимов редактирования: поведение редактора и его реакция на нажатие клавиш определяется тем, в каком режиме он сейчас находится.

Содержание

[править] Навигация

Внутри строки: ...

  • 0 — переход в начало строки
  • ^ — переход на первый непробельный символ
  • $ -- переход в конец строки
  • f символ -- переход к первому найденному символу
  • F символ -- переход к первому найденному символу в обратном направлении
  • t символ -- перейти на один символ левее заданного (почти как f, только идёт на один символ меньше; очень удобно, когда надо "удалить до запятой, но запятую оставить")
  • T символ -- перейти на один символ левее заданного, поиск ведется в обратном направлении
  • w -- перейти к началу следующего слова
  • e -- перейти в конец следующего слова
  • b -- перейти к началу предыдущего слова


По строкам:

  • 30G -- перейти на строку 30
  • G — перейти на последнюю строку
  • gg -- перейти на первую строку

По отметкам:

  • `` -- к месту, с которого был сделан последний прыжок (прыгнуть назад)
  • `. -- к месту последней правки

Прокрутка окна:

  • z- -- прокрутить окно так, что строка с курсором будет почти в самом низу
  • z. -- прокрутить окно так, что строка с курсором будет почти в центре
  • z Enter -- прокрутить окно так, что строка с курсором будет вверху

[править] Правка

  • r -- замена
  • d -- удаление
  • y -- копирование
  • < -- сдвиг влево
  • > -- сдвиг вправо
  •  ! -- передача внешней команде

[править] В режиме вставки

  • ctrl t -- сдвинуть строку вправо
  • ctrl d -- сдвинуть сроку влево
  • ctrl w -- стереть слово слева
  • ctrl u -- стереть всю строку слева

[править] Отличия Vim от Vi

Некоторые приятные возможности редактора Vim:

  • Встроенная помощь;
  • Визуальный режим (выделение блоков);
  • Поддержка вкладок (только Vim 7);
  • Подсветка синтаксиса для более чем 200 языков программирования;
  • Неограниченная глубина истории действий (undo/redo);
  • Автоматическое контекстозависимое продолжение слов и названий функций (autocompletion);
  • Расширенная поддержка регулярных выражений;
  • Интеграция с большим числом компиляторов, интерпретаторов и отладчиков;
  • Поддержка скриптинга (на своём языке, Perl или Python) и огромное количество готовых скриптов (>1500).

Для того чтобы перевести Vim в режим совместимости с Vi, необходимо вызвать команду:

 set compatible

Обратное действие:

 set nocompatible

Vim автоматически включает эту опцию (nocompatible) если видит, что в домашнем каталоге пользователя есть файл ~/.vimrc.

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

  • v --- посимвольное выделение;
  • V (shift v) --- построчное выделение;
  • ctrl-v --- поблочное выделение;
  • gv --- вернуть выделение (после выполнения операции, например);
  • I --- вставить введённый текст во все строки, выделенные блоком, перед блоком (только для вертикального блока).

После того как блок выделен, обычная операция, как правило, применяется ко всему блоку. Например, если нажать d, то блок удалится; y -- скопируется; ~ --- изменит регистр; и так далее.

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

set ve=all

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

Выключить режим виртуального редактирования можно так:

set ve=

[править] Новые возможности Vim 7

  • Проверка орфографии
    •  :set spell — включить поддержку орфографии
    •  :set nospell — выключить поддержку орфографии
    • ]s — перейти к следующему неправильному слову
    • [s — перейти к предыдущему неправильному слову
    • z= — показать наиболее близкие альтернативы неправильному слову
  • Продвинутое undo (машина времени, просмотр изменений и другое)
    •  :earlier ...
    •  :later ...
    •  :undolist
    •  :undo число
  • Табы
    • tabe файл
    • tabs — список табов
    • tabc (close)
    • tabnew
    • tabn (next)
    • tabp (previous)
    • tabf (first)
    • tabo (other) — закрыть все остальные табы
  • Автоматическое продолжение названий методов, переменных (omni completion)
    • ctrl+x ctrl+o
  • Автоматическая подсветка парных скобок {, [, (
    •  :NoMatchParen — отключить подсветку

Дополнительная информация:

[править] Полезные модули для Vim

[править] Vundle

Менеджер пакетов для Vim.

[править] jedi-vim

Для автоматического продолжения названия функций и методов, для подсказок, для быстрого перехода в место определения функции в коде Python.

Установить pathogen:

 mkdir -p ~/.vim/autoload ~/.vim/bundle && \
 curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

Включить pathogen (в ~/.vimrc):

 execute pathogen#infect()

Инсталляция с помощью pathogen:

 cd ~/.vim/bundle/ && git clone --recursive https://github.com/davidhalter/jedi-vim.git

[править] Программы и модули, использующие vi, vim и vi-подобный интерфейс

[править] Vimperator

Основная страница: Vimperator

Существует модуль для Web-браузера Mozilla, известный как Vimperator, который позволяет управлять браузером пользуясь одной только клавиатурой. Клавиши и комбинации клавиш, используемые для управления такие же (или построены по аналогичному принципу) как клавиши управления в Vim.

[править] It's All Text

К сожалению, vimperator не позволяет редактировать текст в текстовых блоках (textarea), которые используются, например при правке wiki-страниц. Этой возможности очень не хватает, потому что при правке текста всегда возникает естественное желание продолжить использовать vi-подобный интерфейс браузера.

Обойти (хотя бы частично) эту проблему можно с помощью дополнительного модуля It's All Text.

Страница проекта It's All Text:

[править] ViEmu

VimEmu (Vi/vim emulation for Visual Studio, Word, Outlook and SQL Server) — программа, позволяющая имитировать интерфейс Vim в популярных программах под Microsoft Windows, таких как MS Visual Studio, MS Word, MS Outlook и некоторых других.

Программа коммерческая. Есть возможность бесплатного скачивания trial-версии.

Страница проекта:

[править] Eclipse

Среда разработки Eclipse поддерживает несколько способов интеграции с редактором Vim или эмуляции интерфейса его напоминающего.

[править] Eclim

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

Страница проекта:

[править] vrapper =

[править] Viable

[править] vimplugin

[править] Google Docs

Google Docs, конечно же, не использует Vim-подобный интерфейс, но редактировать документы Google Docs с помощью Vim можно очень легко[1]:

$ google docs edit --title "To-Do List" --editor vim

[править] 7 хороших привычек пользователя Vim

Создатель Vim, Брам Муленар, рассказывает о том, какие привычки могут хорошо помочь пользователю Vim.


[править] gvim, vim-gtk и другие

Посмотреть какой сейчас выбран шрифт:

set gfn?

Установить чтобы такой шрифт использовался всегда:

set guifont=Monospace\ 7

(здесь вместо Monospace\ 7 указывается необходимый шрифт.

Если вы хотите использовать разные шрифты для разных типов файлов, указывайте в ~/.gvimrc для разных типов файлов (в данном случае для *.txt):

autocmd BufEnter *.txt set guifont=Arial\ 12

[править] vimdiff

$ vimdiff file1 file2
   * do - Получить изменения из другого окна в текущее.
   * dp - Вставить изменения из текущего окна в другое.
   * ]c - Перейти к следующему изменению.
   * [c - Перейти к предыдущему изменению.
   * Ctrl W + Ctrl W - Переключиться на другое окно.
   * :diffupdate - diff update
   * :syntax off - выключить подсветку синтаксиса
   * zo - раскрыть свернутый кусок текста
   * zc - свернуть кусок текста

Ещё по теме:

[править] Вопросы и ответы

[править] Как разбить длинные строки на строки меньшего размера?

Установить желаемую ширину текста:

 set tw=60

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

 gq

[править] Как поменять статусную строку?

Например, так:

:set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [ASCII=\%03.3b]\ [HEX=\%02.2B]\ [POS=%04l,%04v][%p%%]\ [LEN=%L] 
:set laststatus=2 

Подробнее: [1]

[править] Как быстро исправить несколько строк в нескольких файлах, если мы знаем, что мы хотим править?

$ grep -n gh file* 
file1:3:ghi
file2:5:ghi
file3:1:ghi
grep -n gh file* > quickfix

Затем:

vi +"cfile quickfix" copen

Внутри: cnext и cprev.

[править] Как руками показать границы folds?

set fdm=marker
set fmr={{{,}}}

такие границы ({{{, }}}) используются по умолчанию, если нужно задать другие, используется fmr.

Подробнее: :help folding.

[править] Как сделать чтобы при запуске gvim открывалось не новое окно, а вкладка в существующем?

Идея такая[2]:

alias gvim='gvim --remote-tab-silent'

[править] Как вставить символ табуляции, если включен expandtab?

Нажать ctrl-v ctrl-i.

Если нужно чтобы в файле всегда табуляция не заменялась пробелами (например, редактируется Makefile), лучше добавить в него комментарий:

# vim: noexpandtab

Автоматически при редактировании этого файла будет включаться режим noexpandtab.

[править] Как сохранить файл, если вы открыли его под обычным пользователем, забыв сделать sudo?

Надо иметь у себя в vimrc:

   cmap w!! %!sudo tee > /dev/null %

А потом сделать w!! когда придётся сохранить такой файл.

[править] Как отправить команду нормального режима через командную строку?

Использовать normal.

Например:

    normal x

(всё равно что нажать x).

Для команд ctrl-w (управление окнами) можно использовать wincmd:

   wincmd j

это всё равно что нажать

   ctrl-w j

[править] Дополнительная информация

Отступы в vim

[править] Примечания

  1. http://lifehacker.com/5568817/five-really-handy-google-command-line-tricks
  2. http://vimandvision.net/entry/246/

[править] Материалы по редакторам vi и Vim на xgu.ru

Источник — «http://ww.xgu.ru/wiki/Vim»