Дата и время публикации:
Назначение и использование
1. Назначение
Vim — широко распространяемый и высоко настраиваемый редактор, позволяющий создавать и изменять эффективно любой текст и включенный в состав многих nix подобных систем, а также Apple OS X
Vim является стабильным и непрерывно совершенствуемым, чтобы стать лучше и надежней. Ему присущи следующие функциональные черты:
- устойчивым, с многоуровневым откатом операций;
- расширяемым за счет использования плагинов;
- поддерживаемым тысячи языков программирования и файловых форматов;
- эффективный поиск и замена текста;
- интерграция со многими утилитами.
Кроме того, он позволяет настраивать внешний вид интерфейса для более дружелюбной навигации и производить сопоставление файлов.
2. Использование
2.1 режим редактора
Имеет несколько режимов — командный и режим вставки [3.9], навигационный подрежим по тексту доступен во всех режимах и позволяет осуществлять навигацию по содержимому редактируемого файла.
Командный режим
В командном режиме выполняются команды, перечисленные ниже, для отмены и возвращения ввода значения, поиск, замена, выхода, сопоставления двух файлов и создания патча.
Режим вставки
Переход в этот режим происходит из командного режима, нажатием на клавиатуре i , а выход — по клавише ESC на клавиатуре. Соответственно, в режиме вставки доступен только клавиатурный ввод и навигация по тексту с использованием стрелок клавиатуры. Для выделение текста нужно использовать визуальный режим.
Визуальный режим
Используется для выделения текста, копирования текста из буфера обмена .
2.2 Настройка буфера обмена (Clipboard)
Проверяем, что Vim имеет поддержку clipboard, как показано в дампе 2.2.1
Дамп 2.2.1, проверка поддержки Clipboard в Vim
$ vim --version | grep clipboard -clipboard +jumplist +popupwin +user_commands +ex_extra -mouse_jsbterm -sun_workshop -xterm_clipboard
Как видно из дампа выше, в Debian такая возможность отключена, потому что на Debian и Ubuntu нужно установить deb-пакет vim-gtk или vim-gnome взамен рассчитанного только на консоль deb-пакета vim [3.12], как показано в дампе 2.2.2 :
Дамп 2.2.2, установка пакетов с поддержкой Clipboard в Vim
$ sudo apt remove vim $ sudo apt install vim-gtk
После чего, поддержка clipboard будет доступна, как показано в дампе 2.2.3
Дамп 2.2.3, повторная поддержка Clipboard в Vim
$ vim --version | grep clipboard +clipboard +jumplist +popupwin +user_commands +ex_extra -mouse_jsbterm -sun_workshop +xterm_clipboard
При установках по умолчанию регистра буфер обмена (clipboard) в ~/.vimrc нужно помнить, что для систем Mac OS X и Windows, оба регистра буфера обмена * и + указывают на системный clipboard, поэтому присваивамые параметру clipboard значения unnamed и unnamedplus будет иметь один и тот же эффект — неименованный регистр будет синхронизирован с системным cliboard, как показано в дампе 2.2.4
Дамп 2.2.4, Допустимые установки параметра clipboard в ~/.vimrc
set clipboard=unnamed set clipboard=unnamedplus
На linux системах, по сути существует два буфера обмена :
- первый является тем же самым как и в других системах (обмен осуществляется по Сtrl+C и Сtrl+V между программами, приведен в Vim к регистру буфера обмена +)
- второй является буфером обмена выбора (приведен в Vim к регистру буфера обмена *).
Поэтому используя unnamedplus на всех трех системах Linux, Windows и Mac OS X позволит :
- копировать содержимое в буфер обмена в другой программе CTRL+С и вставлять с клавишей p в Vim,
- выдергивать содержимое из Vim и вставлять в другой программе с помощью CTRL+V;
В случае, если есть желание использовать буфером обмена выбора в Linux, понадобится также unnamed
Ниже, в дампе 2.2.5 показана кросс-платформенная запись, которая учитывает оба типа регистра, указывающие на системный (приведен к регистру буфера обмена + ) и буфер обмена выбора (приведен к регистру буфера обмена *) [3.13].
Дамп 2.2.5, Кросс-установки параметра clipboard в ~/.vimrc
... " cross-platform value for both register types are pointed to the system clipboard (mapped to register+ in Vim) and the selection clipboard (mapped to register * in Vim) set clipboard^=unnamed,unnamedplus ...
Теперь можно использовать буфер обмена, который лучше использовать вместе с визуальным режимом, если идет речь о передаче другой программе выделенного текста.
2.3. Использование визуального режима
Визуальный режим реализует три операции выделения по символьно (клавиша v в нижнем регистре), построчно (комбинация shift+V или клавиша V в верхнем регистре, если нажат был Caps Lock). Ниже, на рисунке 2.3.1, приводится пример перехода в визуальный режим, оперирующий построчно. Управление выделением производится клавишами со стрелками.
Рисунок 2.3.1
2.4 Операция Вырезки/Вставка текста
На клавиатуре :
- Клавишей yy или командой :y осуществляетcя вырезка текста в текущей позиции.
- Клавишей p вставляется текст вырезанный или удаленный в текущей строке .
При этом, чтобы вставить содержимое буфера обмена в строке выше следует использовать команду P .
2.5 Удаление одной или нескольких строк
Для удаления одной или несколько строк выйти из режима "Вставки" (клавиша ESC) выделить несколько строк, нажав и удерживая на клавиатуре — клавишу Ctrl, на мышке — левую кнопку, как показано на рисунке 2.5.1
Рисунок 2.5.1
И тут жу нажать клавишу dd или D [3.8].
Проще указать удаляемые строки :[start],[end]d , например, для только что приведенного примера, команда :52,70d приведет к следующему, как показано на рисунке 2.5.2
Рисунок 2.5.2
Удаление из текущей позиции текста выполняется выделением блока (клавиша Ctrl+левая кнопка мышки) и нажатием клавиши dd
2.6 Отмена/возврат удаленной строки
Для отмены только что удаленной строки, как показано на рисунке 2.6.1
Рисунок 2.6.1
в командном режиме нажатием клавиши u или выполнить команду :u для возврата только что удаленной строки 68, результат восстановления которой показано на рисунке 2.6.2
Рисунок 2.6.2
2.7 Отображение / скрытие номера строк
В командном режиме, отображения номеров строк ввести [3.1], как показано в дампе 2.7.1
Дамп 2.7.1, команды отображения строк
: set number ... : set nu
Для их скрытия выполнить команду set nonumber, как показано в дампе 2.7.2
Дамп 2.7.2, команды скрытие строк
: set nonumber ... : set nonu
Переход на определенную строчку кода осуществляется вводом номера строка <line-number> в редактируемом файле, как показано в дампе 2.7.3
Дамп 2.7.3, команды скрытие строк
: <line-number>
Для установки отображения строк по умолчанию, в файле ~/.vimrc определить [3.5], как показано в дампе 2.7.4:
Дамп 2.7.4, установка отображения строк в ~/.vimrc
" Always show the number lines: set number
2.8 Отображение текущего положения курсора
В vim предусмотрено перемещение курсора по строкам, командой :set cursorline и столбцам, командой :set cursorcolumn , как показано на рисунке 2.8.1
Рисунок 2.8.1
Для наведения красоты рекомендую использовать команды:
- для строк: hi CursorLine cterm=NONE ctermbg=darkgreen ctermfg=white guibg=darkgreen guifg=white ,
- для столбцов: hi CursorColumn cterm=NONE ctermbg=darkblue ctermfg=white guibg=darkblue guifg=white
При этом обязательно должны быть установлены сначала команды :set cursorline и :set cursorcolumn соответственно.
Для установки отображения положения курсора по умолчанию по умолчанию, в файле ~/.vimrc определить [3.6], как показано в дампе 2.8.2
Дамп 2.8.2, установка отображения положения курсора в ~/.vimrc
" Always show the cursor position in the current line :set cursorline " Always show the cursor position in the current column: :set cursorcolumn
Для измененения цвета курсора в текущей позиции по умолчанию, как показано в дампе 2.8.3
Дамп 2.8.3, установка цвета положения курсора в ~/.vimrc
" Always light the cursor position in the current line : hi CursorLine cterm=NONE ctermbg=darkgreen ctermfg=white guibg=darkgreen guifg=white " Always light the cursor position in the current column: : hi CursorColumn cterm=NONE ctermbg=darkblue ctermfg=white guibg=darkblue guifg=white
Результат показан на рисунке 2.8.4
Рисунок 2.8.4
2.9 Поиск по ключевым словам
Переключение на поиск по тексту осуществляется нажатием клавиши ("/") и указанием сразу после него ключевого слова <key-word> [3.2], как показано в дампе 2.9.1
Дамп 2.9.1, поиск по ключевому слову
:<key-word>
После нажать Enter, если <key-word> существует Vim перейдет на него: последующем нажатием n будет осуществлен переход на следующее найденное слово.
2.10 Сравнение двух файлов
Желательно, но необязательно, перейти в рабочую директорию, где будут сравниваться два файла. На пример в директорию -p bison/, в которой находятся сопоставляемые файлы bison_2.3.bb и bison_2.7.bb, как показано в дапме 2.10.1 :
Дамп 2.10.1, дерево директории bison/
bison/ ├── bison_2.3.bb └── bison_2.7.bb
Cамым простым будет выполнить команду: vimdiff bison_2.3.bb bison_2.7.bb — результат которой показан на картинке 2.10.2
Если же файл уже открыт в Vim, в нем выполнить команду :vert diffsplit , в данном случае указать сравниваемый файл, как в данном примере bison_2.7, результат сравнения показан на рисунке 2.10.3
В результате, Vim сопоставление двух файлов — bison_2.7.bb и bison_2.3.bb, где красным цветом обрамляется измененные значения в строках: синим — добавленные, а прочерки на голубом фоне — отсутствующие строки в каждом сопоставляемом файле.
Для вертикального сравнения использовать команду :vert diffsplit , результат которой показан на рисунке 2.10.2
Выполнить следюущие операции, lля:
- выхода из режима сравнения необходимо набрать команду :diffoff,
- переключения курсора между двумя окнами набрать команду :diffthis
2.11 Сохранения результатов сопоставления двух файлов
Cледует выполнять с помощью :!<cmd>, чтобы выполнить в Vim внешнюю команду GNU diff [3.10], как показано в дампе 2.11.1
Дамп 2.11.1, выполнение внешней команды GNU diff
:!diff bison_2.3.bb bison_2.7.bb
В результате при завершении Vim будет создан diff-файл, пример которого показан в дампе 2.11.2
Дамп 2.11.2, результат выполнения внешней команды GNU diff
--- bison_2.3.bb 2022-12-08 17:36:02.000000000 +0300 +++ bison_2.7.bb 2022-12-13 13:15:43.000000000 +0300 @@ -4,36 +4,37 @@ grammars ought to work with Bison with no change. Anyone familiar with Yacc should be able to use Bison with \ little trouble." HOMEPAGE = "http://www.gnu.org/software/bison/" -LICENSE = "GPLv2" -LIC_FILES_CHKSUM = "file://COPYING;md5=eb723b61539feef013de476e68b5c50a" +LICENSE = "GPLv3" +LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504" SECTION = "devel" DEPENDS = "bison-native flex-native" PR = "r1" BASE_SRC_URI = "${GNU_MIRROR}/bison/bison-${PV}.tar.gz \ - file://bison-2.3_m4.patch" + file://m4.patch \ + file://dont-depend-on-help2man.patch \ + " + +# No point in hardcoding path to m4, just use PATH +EXTRA_OECONF += "M4=m4" + +SRC_URI = "${BASE_SRC_URI} \ + file://fix_cross_manpage_building.patch \ + " -SRC_URI = "${BASE_SRC_URI}" +SRC_URI[md5sum] = "ded660799e76fb1667d594de1f7a0da9" +SRC_URI[sha256sum] = "19bbe7374fd602f7a6654c131c21a15aebdc06cc89493e8ff250cb7f9ed0a831" -SRC_URI[md5sum] = "22327efdd5080e2b1acb6e560a04b43a" -SRC_URI[sha256sum] = "52f78aa4761a74ceb7fdf770f3554dd84308c3b93c4255e3a5c17558ecda293e" ...
При этом нужно помнить, что
- Команда :!diff -u OriginalFile UpdatedFile > PatchFile формирует PatchFile путем перенаправления полученной разницы между OriginalFile и UpdatedFile, в данном случае bison_2.3.bb и bison_2.7.bb;
- команды :diffget и :diffput не будет определенно внешне выполняемой командой diff, потому что :diffget применяет изменения к текущему окну, так же как и :diffput к смежному с ним [3.11].
3. Библиография
3.1 Vim Tips Wiki -- Display line numbers
3.2 Vim Tips Wiki -- Searching
3.3 Stackoverflow -- How to copy to clipboard in Vim?
3.4 linuxhint -- Vim Diff Two Files
3.5 Vim Tips Wiki -- Open vimrc file
3.6 Vim Tips Wiki -- Highlight current line
3.7 Vim Tips Wiki -- Xterm256 color names for console Vim
3.8 How to Delete a Single Line in Vi/Vim
3.9 CS107 Computer Organization & Systems -- The Vim Editor
3.10 StackExchange -- Using Vim Diff To Create A Patch File?
3.11 Vim - Diff
3.12 Vim Tips Wiki -- Accessing the system clipboard
3.13 StackOverflow -- What is difference between vims clipboard unnamed and unnamedplus settings?