Мое практическое освоение консольного редактора 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
Чтобы перемещаться между таким разделением окон следует использовать сочетание: 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
Ниже скриншот, как работает данное сравнение:
Есть файл в котором нужно найти все встречающиеся слова и заменить на нужные
Задача: заменить 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.