Мое практическое освоение консольного редактора vi & vim, а то я только пользоваться могу редактором nano, что собственно неправильно (его то по умолчанию в системе нет и приходится ставить как пакет).

Чтобы задействовать все преимущества консольного редактора vi нужно в систему, в данном случае рассматриваю Ubuntu 12.04.4 Server amd64 следует установить пакет:

ekzorchik@srv-mon:~$ sudo apt-get install vim -y

vim-nox – Vi IMproved – enhanced vi editor

ekzorchik@srv-mon:~$ sudo apt-get install vim-nox -y

По умолчанию во многих системах vi — Это псевдоним команды vim. В Ubuntu обе команды запускают vim, что перепроверить это, можно запустить команду alias, в моем случае вывод не указал ничего намекающего на работу редактора:

ekzorchik@srv-mon:~$ alias

alias alert=’notify-send –urgency=low -i “$([ $? = 0 ] && echo terminal || echo error)” “$(history|tail -n1|sed -e ‘\”s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//’\”)”‘

alias egrep=’egrep –color=auto’

alias fgrep=’fgrep –color=auto’

alias grep=’grep –color=auto’

alias l=’ls -CF’

alias la=’ls -A’

alias ll=’ls -alF’

alias ls=’ls —color=auto’

Далее запускаем обучающую программу, набрав в терминале команду:

ekzorchik@srv-mon:~$ vimtutor уже прочитав всю информацию и опробовав все на практике станет более понятен материал моей заметке, кое что конечно же будет повторяться.

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

ekzorchik@srv-mon:~$ cp /etc/passwd /tmp

Далее я рассмотрю несколько основных способов запуска vi: (для выхода из редактора следует нажать: Shift + : и набрать в поле приглашения: q! – это укажет редактору выйти и не задавать каких либо вопросов.

Начать со строки номер 5

ekzorchik@srv-mon:~$ vi +5 /tmp/passwd

Начать редактирование с последней строки:

ekzorchik@srv-mon:~$ vi + /tmp/passwd

Начать с первой строки со слова ekzorchik:

ekzorchik@srv-mon:~$ vi +/ekzorchik /tmp/passwd

Восстановить файл после сбоя во время сессии:

ekzorchik@srv-mon:~$ vi -r /tmp/passwd

,если сбоя не было, то в консоли будет сообщение вида:

E305: No swap file found for /tmp/passwd

Press ENTER or type command to continue

и выбросит в консоль командной строки

Редактировать файл в режиме только для чтения:

ekzorchik@srv-mon:~$ view /tmp/passwd

переходим в режим редактирования (нажатие клавиши «i») и сразу же видим выделенное красным цветом предупреждающее сообщение

— INSERT — W10: Warning: Changing a readonly file

После окончания работы с vi нужно сохранить данные и выйти из программы, для чего существует несколько способов:

  • Сохранить файл до того, как выйти: – набрать :w
  • Выйти и сохранить изменения: – набрать :wq
  • Сохранить без сохранения::q!
  • Сохранить содержимое файла под другим именем::w /tmp/myfile.txt

Пример:

:w /tmp/myfile.txt

сообщение в консоли редактора:

“/tmp/myfile.txt” [New] 26L, 1101C written

Сравниваю два файла, исходный и полученный — результат они одинаковы:

ekzorchik@srv-mon:~$ diff /tmp/passwd /tmp/myfile.txt

ekzorchik@srv-mon:~$ md5sum /tmp/passwd /tmp/myfile.txt

3e4019fc92fbf85cd536b749d2f116ca /tmp/passwd

3e4019fc92fbf85cd536b749d2f116ca /tmp/myfile.txt

, как видно md5sum файлов одинакова, просто у файла passwd есть теперь уже другое имя.

Редактор vi также позволяет одновременно выбрать несколько файлов для редактирования:

ekzorchik@srv-mon:~$ vi /tmp/passwd /tmp/myfile.txt

первым откроется файл /tmp/passwd, чтобы перейти к следующему, нужно набрать: «:n»,чтобы сохранить изменения и перейти к следующему, нужно набрать: «:wn», чтобы отменить изменения и перейти к следующему файлу: «:n!»

Но мне кажется, что открывать несколько файлов удобнее разделяя экран vi:

ekzorchik@srv-mon:~$ vi /tmp/passwd /tmp/myfile.txt

:split /tmp/myfile.txt → используя клавишу Tab, можно указывать путь к файлам, как в обычном интерпретаторе команд bash

Открытие нескольких файлов через vim

Чтобы перемещаться между таким разделением окон следует использовать сочетание: Ctrl + W и после нажать клавишу W, чтобы закрыть текущие окна, используем обычную команду выхода из vi (:q).

Теперь я расскажу, о способах навигации:

По началу вызывает некоторое непонимание при работе с редактором — это, то что в нем нельзя просто так сразу начать печатать. У vi есть множество режимов выполнения различных типов задач:

  • Первый режим Normal (обычный)— в этом режиме можно просматривать любое место в файле
  • Второй режим Insert (вставка) — нажатие клавиши «i» и после редактор готов принимать от нас уже команды, уведомление —INSERT— есть тому подтверждение:

ekzorchik:x:1000:1000:ekzorchik,,,:/home/ekzorchik:/bin/bash

— INSERT —

  • Второй режим также может именоваться как Replace (замена)

Чтобы из режима Insert или Replace попасть в режим Normal нужно просто нажать клавишу Esc (Escape) на клавиатуре, после того как завершили вставку или замену текста.

Существуют так называемые горячие клавиши

  • Горячие клавиши для навигации
  • Клавиши для изменения текста
  • Клавиши для удаления и вставки текста
  • Вспомогательные клавиши

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

В основе редактора vi лежит редактор под названием Ex. Некоторые команды vi, которые выше, я как пример приводил начинающиеся с точки с запятой и известны как Ex-команды. Для ввода таких команд следует перейти в режим Normal (обычный) и набрать двоеточие («:»). Это позволит перейти в режим командной строки. В этом режиме можно использовать клавишу Tab для завершения команды или имени файла, а также клавиши управления курсором для навигации по журналу команд, как в интерпретаторе команд bash. Нажимая в конце команды Enter, переходим в режим Normal (обычный).

Ниже я приведу некоторые примеры Ex-команд:

:!bash — перейти в интерпретатор команд bash. Когда снова понадобиться редактор vi следует просто набрать exit

:!date — запустить команду date (или любую другую по своему усмотрению). Нажатие Enter приводит к возврату в редактор.

:!! – повторно запустить предыдущую команду

:20 — перейти к строке 20 в файле

:e file.txt — выйти из текущего файла и начать редактировать файл file.txt

:g/Blog Ekzorchik/p — просмотреть каждую строку в файле содержащую «Blog Ekzorchik»

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

В домашней директории можно обнаружить файл:

ekzorchik@srv-mon:~$ cat .viminfo

который регистрирует все введенные команды («Болтливый режим») используемые в режиме Insert и Replace.

Конечно моя заметка есть всего лишь маленькая крупица знаний которым я могу поделиться с Вами, лучшим помощником в получении качественной информации служит команда: «:help» – поэтому не пренебрегайте ею. Я же теперь при описании тех или иных задач выкладываемых на своем блоге буду вместо консольного редактора nano использовать мощь редактора vi.

ФАЙЛЫ

/usr/share/vim/vim73/doc/*.txt

Файлы справочника Vim. См. “:help doc-file-list” для

получения полного списка.

/usr/share/vim/vim73/doc/tags

Файл меток, используемый для поиска информации в файлах

справки.

/usr/share/vim/vim73/syntax/syntax.vim

Системные настройки синтаксиса.

/usr/share/vim/vim73/syntax/*.vim

Файлы синтаксиса для разных языков.

/usr/share/vim/vimrc

Системные настройки Vim.

/usr/share/vim/gvimrc

Системный настройки графического интерфейса.

/usr/share/vim/vim73/optwin.vim

Сценарий, используемый при выполнении команды

“:options”. Хороший способ просматривать и изменять

настройки.

/usr/share/vim/vim73/menu.vim

Системные настройки меню для gvim.

/usr/share/vim/vim73/bugreport.vim

Сценарий для создания отчёта об обнаруженных глюках. См.

“:help bugs”.

/usr/share/vim/vim73/filetype.vim

Сценарий для определения типа файла по имени. См. “:help

‘filetype'”.

/usr/share/vim/vim73/scripts.vim

Сценарий для определения типа файла по содержимому. См.

“:help ‘filetype'”.

/usr/share/vim/vim73/print/*.ps

Файлы для печати PostScript.

Продолжаю знакомство с редактором vi, vim имеет множество настроек, влияющий на его поведение, к примеру:

подсветка кода в зависимости от типа загружаемого файла

Данную надстройку можно сделать, как для текущего пользователя (файл ~/.vimrc) так и для всей системы (/usr/share/vim/vimrc -> /etc/vim/vimrc)

ekzorchik@srv-mon:~$ vi ~/.vimrc

if has(“autocmd”)

filetype on

filetype indent on

filetype plugin on

endif

подсветка синтаксиса

syntax on
нумерация строк

set number

Результат открытия файл с отображением нумерации строк:

ekzorchik@srv-mon:~$ vi /tmp/passwd

1 root:x:0:0:root:/root:/bin/bash

2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh

3 bin:x:2:2:bin:/bin:/bin/sh

4 sys:x:3:3:sys:/dev:/bin/sh

5 sync:x:4:65534:sync:/bin:/bin/sync

Сравнение файлов

ekzorchik@srv-mon:~$ vimdiff /tmp/myfile.txt /tmp/passwd

Ниже скриншот, как работает данное сравнение:

Сравнение двух файлов через vim

Есть файл в котором нужно найти все встречающиеся слова и заменить на нужные

Задача: заменить wclient на W7X64 в открытом файле внутри редактора vi

define host {

use generic-host

host_name W7X64

alias W7X64

address 192.168.1.39

}

define service{

use generic-service

host_name wclient

service_description NSClient++ Version

check_command check_nt!CLIENTVERSION

}

define service{

use generic-service

host_name wclient

service_description Uptime

check_command check_nt!UPTIME

}

define service{

use generic-service

host_name wclient

:g/wclient/s//W7X64/g

После нажатия клавиши Enter информация выполнения покажет следующее

3 substitutions on 3 lines и просмотрев файл, результат достигнут. Все вхождения слова wclient заменены на нужное W7X64

Как видно даже из небольших примеров, возможности данного редактора впечатляют. Принцип утилиты — действие, как можно заметить на 100% оправдывает свое обозначение. Все же в рамках одной заметке не возможно описать все способы, все команды да и зачем, обучающая программа уже дает тот минимум которые в последствии послужит неплохим шагом к пониманию чего-то большего. От себя хочу сказать, что на просторах интернета приведено множество подробных руководств которыми не стоит пренебрегать а возможно и можно почерпнуть некоторые дополнительные знания. Так что вперед. На этом всё, с уважением, ekzorchik автор блога www.ekzorchik.ru.

От ekzorchik

Всем хорошего дня, меня зовут Александр. Я под ником - ekzorchik, являюсь автором всех написанных, разобранных заметок. Большинство вещей с которыми мне приходиться разбираться, как на работе, так и дома выложены на моем блоге в виде пошаговых инструкции. По сути блог - это шпаргалка онлайн. Каждая новая работа где мне случалось работать вносила новые знания и нюансы работы и соответственно я расписываю как сделать/решить ту или иную задачу. Это очень помогает. Когда сам разбираешь задачу, стараешься ее приподнести в виде структурированной заметки чтобы было все наглядно и просто, то процесс усвоения идет в гору. Также прошу на https://win.ekzorchik.ru https://lin.ekzorchik.ru https://net.ekzorchik.ru https://voip.ekzorchik.ru https;//home.ekzorchik.ru