× К оглавлению На главную Об авторе

Дата и время публикации:    

Назначение и использование

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 системах, по сути существует два буфера обмена :

Поэтому используя unnamedplus на всех трех системах Linux, Windows и Mac OS X позволит :

В случае, если есть желание использовать буфером обмена выбора в 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 Операция Вырезки/Вставка текста

На клавиатуре :

При этом, чтобы вставить содержимое буфера обмена в строке выше следует использовать команду 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

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

При этом обязательно должны быть установлены сначала команды :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ля:

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"
...

При этом нужно помнить, что

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?

3.14 Getting started with Vim visual mode

Сайт разработан в соответствии с рекомендациями консорциума W3C для языка разметки HTML5.

Об авторе можно прочитать здесь.

Copyright © 2015-2019 Андрей Ржавсков