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

Командный режим Vim

В командном режиме вы можете перемещаться по редактируемому тексту и выполнять действия над ним с помощью буквенных клавиш. Именно этот режим открывается по умолчанию при старте редактора. Здесь вы будете использовать краткие команды, перед которыми может устанавливаться номер, чтобы повторить команду несколько раз. Для начинающих может быть поначалу очень запутанно то, что в командном режиме символы интерпретируются как команды.

Для перемещения используются такие команды:

  • h — на один символ влево;
  • l — на один символ вправо;
  • j — на одну строку вниз;
  • k — на одну строку вверх;
  • w — на слово вправо;
  • b — на слово влево;
  • H — перейти в низ экрана;
  • G — перейти в конец файла;

Можете запустить редактор и поэкспериментировать, чтобы было легче понять как это работает. Если перед тем как нажать кнопку буквы нажать цифру, то эта команда будет повторена несколько раз. Например, 3j переведет курсор на три строки вверх.

Для переключения в режим редактирования используются такие команды:

  • i — вставить текст с позиции курсора, символ под курсором будет заменен;
  • I — вставить текст в начало строки;
  • a — добавить текст начиная от позиции курсора;
  • o — вставить новую строку после этой и начать редактирование;
  • O — вставить новую строку перед этой и начать редактирование;
  • r — заменить текущий символ;
  • R — заменить несколько символов.

К этим командам тоже применимы символы повторения. Поэкспериментируйте, можно получить интересный и не совсем ожиданный результат.

Более сложные команды редактирования текста. Вы можете править текст не только в обычном режиме, но и в командном с помощью команд. Для этого применяются такие команды:

  • d — удалить символ;
  • dd — удалить всю строку;
  • D — удалить символы начиная от курсора и до конца строки;
  • y — копировать символ;
  • yy или Y — скопировать всю строку;
  • v — выделить текст;

Эти команды редактора vim работают немного по-другому после нажатия одной из них ничего не произойдет. Мы еще можем задать количество символов, к которым будет применена команда и направление, с помощью кнопок перемещения курсора. Например, чтобы удалить два символа справа от курсора нажмите d3l, а чтобы удалить три строки вниз — d3j. Команды yy, dd, Y — не что иное, как сокращения.

Кроме этих команд, есть еще несколько полезных, которые мы не можем не рассмотреть:

  • p — вставить после позиции курсора;P — вставить перед позицией курсора;
  • u — отменить последнее действие;
  • . — повторить еще раз последнее действие;
  • U — отменить последнее действие в текущей строке;
  • /шаблон — искать вхождение;
  • %s/шаблон/заменить — заменить первое слово на второе;
  • n — продолжить поиск вперед;
  • N — продолжить поиск назад;

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

Поиск и Замена

Вы можете искать интересующий вас текст используя команду в командном режиме. Напечатав /This, вы увидите что все слова This подсвечиваются, в примере ниже.

Поиск

Нажав n, вы переместитесь к следующему вхождению поискового паттерна. Используя N, вы попадёте на предыдущее вхождение. Паттерн, который вы указываете после может быть любым регулярным выражением. Почитайте статью Advanced search and Replace with RegEx для лучшего понимания принципов работы с регулярными выражениями.

Поиск и Замена

Для того, чтобы заменить текст вам придётся воспользоваться режимом командной строки. В режиме командной строки, команда s используется для замены текущей строки, %s для замены во всем файле и наконец <begin>, <end>, для замены от <begin> номера строки, до <end> номера строки.

Следующий формат /<search pattern>/<replace pattern>/gi в котором <search pattern> и <replace pattern> являются стандартными регулярными выражениями. В примере выше, я заменяю каждое вхождение слова This на That. Флаг i после g, делает поиск нечувствительным к регистру, в свою очередь I сделает поиск чувствительным к регистру. Флаг g делает замену глобальной. без этого флага замена выполнится лишь один раз, для строки.

Плагины

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

Совет: For a list of popular plugins, see Vim Awesome)

Установка

Используя встроенную систему управления пакетами

В Vim 8 добавлена возможность загрузки сторонних плагинов. Чтобы использовать эту функциональность, переместите плагины в .

Используя менеджер плагинов

Менеджер плагинов позволяет устанавливать плагины и управлять ими одинаковым образом независимо от того, на какой системе вы запускаете Vim. Он представляет собой специальный плагин, который выполняет роль пакетного менеджера для других плагинов.

Из репозиториев Arch

Группа объединяет множество разнообразных плагинов. Используйте команду для отображения списка пакетов, которые вы можете затем , используя pacman.

cscope

Установите пакет .

Скопируйте стандартный файл cscope, который Vim будет автоматически читать:

Примечание: Вам наверное понадобится откомментировать следующие строки в , чтобы включить горячие клавиши cscope в Vim 7.x:

set timeoutlen=4000
set ttimeout

Создайте файл, который содержит список файлов для индексации (cscope может обрабатывать множество языков, но для примера мы возьмем файлы на Си/Си++ с расширениями .c, .cpp и .h):

cd /путь/к/каталогу/проекта
find . -type f -print | grep -E '\.(c(pp)?|h)$' > cscope.files

Создание файлы базы данных, которые cscope будет читать:

cscope -bq

Примечание: cscope ищет файл в рабочем каталоге, поэтому тот же каталог следует использовать и для навигации по проекту в Vim. Также, вы можете указать путь до этого файла явно, установив его в переменной окружения .

Горячие клавиши по умолчанию:

 Ctrl-\ и
      c: найти функции вызывающие эту функцию
      d: найти функции вызываемые этой функцией
      e: найти egrep паттерн
      f: найти этот файл
      g: найти это определение
      i: найти файлы, включающие этот файл (#include)
      s: найти этот символ Си
      t: найти присвоения

Не стесняйтесь изменять горячие клавиши:

#Maps ctrl-c to find functions calling the function
nnoremap <C-c> :cs find c <C-R>=expand("<cword>")<CR><CR>

Установите пакет AUR.

Полезные опции можно записать в :

let Tlist_Compact_Format = 1
let Tlist_GainFocus_On_ToggleOpen = 1
let Tlist_Close_On_Select = 1
nnoremap <C-l> :TlistToggle<CR>

Поиск и замена в Vim

Довольно часто нам нужно найти определенную последовательность в тексте. Текстовый редактор Vim умеет это делать.

Во-первых, если нужно найти символ в строке, нажмите f и наберите нужный символ, курсор будет перемещен к его позиции.

Для поиска по всему файлу используйте команду /. После нее нужно ввести слово, которое нужно найти. Для поиска следующего вхождения используйте n, для предыдущего — N.

Для замены будет использоваться немного другая конструкция:

Двоеточие запускает командную оболочку с командой s для замены. Символ % означает что обрабатывать нужно весь файл, а g значит, что нужно обработать все найденные строки, а не только первую. Чтобы программа спрашивала перед каждой заменой можно добавить в конец строки опцию c.

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

Перед использование Vi для редактирования файлов вам следует узнать, как в Vi перемещаться по файлу. У Vi множество команд перемещения, многие из них мы сейчас рассмотрим. Для этой части обучения найдите какой-нибудь малоценный текстовый файл (TODO: лучше на английском) и загрузите его в Vi напечатав:

vi myfile.txt

Если у вас установлен Vim, наберите в консоли:

vim myfile.txt

Если вы предпочитаете использовать GVim:

gvim myfile.txt

myfile.txt должно быть именем текстового файла в вашей системе.

Внутри Vi

После загрузки Vi, на экране вы должны увидеть часть загруженного вами текстового файла. Поздравляю — вы уже в Vi! В отличии от большинства редакторов, загрузившись, Vi находится в специальном режиме, называемом «командным режимом». Это значит, что если вы нажмете клавишу <l>(строчная L), вместо появления «l» на месте курсора вы увидите, что курсор всего лишь сдвинулся на один символ вправо. В командном режиме знаки, набираемые на клавиатуре, используются как команды для Vi, а не как помещаемые в текст символы. Один из наиболее важных типов команд — это команды перемещения. Давайте рассмотрим некоторые из них.

Как установить

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

После установки перейдите в раздел «Справка» и выберите вкладу «Учебник Vim» — это интерактивная обучающая программа и минимум, необходимый для работы с редактором. Учебник состоит из семи уроков, по ходу которых вы познакомитесь с основными командами и сможете медленно обрабатывать код. Чтобы постоянно не возвращаться к учебнику — рекомендуем установить на рабочий стол фирменные обои или распечатать шпаргалку с командами Vim. Когда выучите команды и сможете ими пользоваться без шпаргалок — переходите на следующий этап и попробуйте использовать Vim на реальном проекте.

Стартовая страница учебника Vim. Учебник можно вызвать через «Справку» или команду vimtutor. Во время тестов мы скачали несколько версий редактора, и команда vimtutor срабатывала не всегда. Поэтому рекомендуем пользоваться «Справкой» — она надёжней

Передвижение по словам

Для передвижения по словам можно использовать следующие клавиши (регистр не важен):

  • w (word) — переместить курсор на первый символ следующего слова;
  • e (end) — переместить курсор на последний символ слова (текущего или следующего);
  • b (begin) — переместить курсор на первый символ слова (текущего или предыдущего).

Про клавишу e … Если курсор находится в слове, но не на последнем символе, то при нажатии e он переместиться к концу этого слова. Если курсор находится на последнем символе слова, то он переместится на последний символ следующего слова.

Про клавишу b … Она работает так же, как и e, только наоборот: базируясь на начале слова.

Редактирование

Редактирование выполняется посредством команд в нормальном режиме. Они очень эффективны в комбинации с командами перемещения. Любая команда из раздела перемещения может задать направление. Например, можно удалить или скопировать одно слово, указав “w” за соответствующей командой.

Рассмотрим наиболее употребимые действия.

Удаление текста

x — удалить символ на позиции курсораd — удалить в заданном командой перемещения направлении. Например, “dl” удаляет один символ справаdd — удалить строкуD — удалить все символы от положения курсора до окончания строки

Замена текста

r — заменить символ на позиции курсора заданным после команды символомc — заменить в заданном командой перемещения направлении. Например, “cb” заменяет предыдущее слово. Для набора текста на замену запускается режим вставки.C — заменить до окончания строки. Текст на замену набирается в режиме вставки.

Копирование и вставка

y — копировать в заданном далее направленииyy — копировать всю строкуY — копировать до окончания строкиp — вставить последнюю скопированную (или удаленную!) строку ниже текущейP — вставить последнюю скопированную (или удаленную!) строку выше текущей

Дополнительные команды редактирования

u — отменить последнее действие<ctrl>-r — вернуть последнее отмененное действиеJ — присоединить строку ниже к текущей

Дальше — больше

Приведенной выше информации вполне достаточно, чтобы открывать, редактировать и сохранять файлы в текстовом редакторе Vim, однако у него есть возможности, которые могут существенно упростить и ускорить работу. Стоит начать с пояснения: Vi был одним из первых визуальных текстовых редакторов, однако начиная с определенной версии программный продукт стал доступен только под коммерческой лицензией. Энтузиасты начали разрабатывать свои аналоги этого текстового редактора, одним из которых является Vim (сокращение от Vi Improved — Vi  усовершенствованный). Vim получил широкое распространение в *nix-дистрибутивах и при запуске команды vi в консоли вероятнее всего откроется именно он.

Прежде всего нужно понять, что Vim может работать в нескольких режимах, каждый из которых обладает своими особенностями и набором поддерживаемых функций. Сразу после запуска редактора вы окажетесь в обычном режиме (normal). Здесь можно не только перемещать курсор по тексту, но и выделять/удалять/копировать/вставлять как отдельные символы, так и целые блоки текста. Эти задачи выполняются нажатием соответствующих букв и цифр (причем регистр букв имеет значение), точка отсчета — текущее положение курсора. Рассмотрим навигацию по файлу:

  • h — смещение курсора на один символ влево;
  • j — смещение курсора на один символ вниз;
  • k – смещение курсора на один символ вверх;
  • l – смещение курсора на один символ вправо;
  • w – смещение курсора в начало следующего слова в данной строке;
  • b – смещение курсора в начало предыдущего слова в данной строке;
  • G – переместить курсор в конец файла;
  • gg – вернуться в начало файла.

Действия навигации также можно совмещать с цифрами, например, комбинация 3w сместит курсор вперед на три слова, а 5k на пять строк вверх.

Часто используемые операции c текстом:

  • x — удалить символ под курсором;
  • d — удалить символы/строки;
  • dd — удалить строку целиком;
  • D — удалить символы от текущего положения курсора до конца строки;
  • v — включить режим выделения текста;
  • y — скопировать символы/строки;
  • yy — скопировать строку целиком;
  • p — вставить символы/строки;
  • u — отменить последнее действие.

Функции удаления и копирования требуют дополнительного пояснения, ведь при нажатии d или y вроде бы ничего не происходит. Дело в том, что редактор ожидает дальнейших указаний — сколько строк символов нужно удалить/скопировать и в каком направлении от текущего положения курсора вести отсчет. Чтобы удалить пять символов вправо от курсора, нужно последовательно нажать d5l, чтобы скопировать три строки, следующие после курсора — y5j. Если имеется выделенный текст, для его копирования достаточно нажать y.

Имеется в Vim и функция поиска:

  • /шаблон — все вхождения набора символов, указанного после (слэша) будут подсвечены в тексте;
  • n — сместить курсор к следующему вхождению;
  • N — сместить курсор к предыдущему вхождению.

Другой режим работы Vim — режим редактирования. Переключиться в него можно несколькими способами:

  • i — режим вставки (INSERT), ввод начинается с позиции курсора;
  • a — режим вставки (INSERT), ввод начинается с позиции, следующей за курсором;
  • A — режим вставки (INSERT), курсор перемещается в конец текущей строки;
  • R — режим замены (REPLACE), все вводимые символы будут последовательно заменять находящиеся под курсором.

Если нужно заменить всего один символ, находящийся под курсором, достаточно нажать r и нужный символ — замена будет произведена без перехода в режим редактирования. Внизу экрана появляется соответствующий индикатор режима — INSERT или REPLACE. Вернутся в общий режим можно нажатием кнопки Esc (индикатор должен пропасть).

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

  • :q — выйти из редактора;
  • :q! — выйти из редактора без сохранения изменений в файле;
  • :w — сохранить изменения в файл;
  • :wq — сохранить изменения и закрыть редактор;
  • :r имя_файла — добавить содержимое указанного файла в редактируемый;
  • :r! команда_консоли — выполнить команду и добавить ее вывод в файл.

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

Автоматически

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

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 не всегда удается определить кодировку файла правильно, и вместо осмысленного текста мы можем наблюдать крокозябры.

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

:e ++enc=cp1251

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

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

:set enc=ucs-2le

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

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

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

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>

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

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: