Vim: различия между версиями

Перейти к навигации Перейти к поиску
30 966 байт убрано ,  12 лет назад
Нет описания правки
'''Искусственное дыхание''' — комплекс мер, направленных на поддержание оборота воздуха через легкие у человека (или животного), переставшего дышать. Может производиться с помощью аппарата искусственного дыхания, либо человеком (дыхание изо рта в рот). Обычно совмещается с [[искусственный массаж сердца|искусственным массажем сердца]]. Типичные ситуации, в которых требуется искусственное дыхание: несчастные случаи в результате автомобильных аварий, происшествия на воде, поражение электрическим током, утопление. Аппарат искусственного дыхания используется также в хирургических операциях.
Продвинутый редактор — кошмар для случайного пользователя. Если его удается в конце-концов закрыть, то вздыхаешь с облегчением и твердой уверенностью, что больше не будешь запускать эту программу ни в коем случае.
 
=== Искусственное дыхание «рот-в-рот» ===
Действительно, такой редактор нельзя просто открыть и начать работать — требуется предварительная подготовка. Зато стоит раз испытать его в работе, и поражаешься, как мог обходиться без него раньше.
[[Изображение:ArificialBreath.JPG|thumb|260 px|right|Искусственное дыхание «рот-в-рот»]]
Наиболее эффективный способ искусственного дыхания.
# Спасите пострадавшего, уберите от него ток, если он им поражён, вытащите из воды при утоплении, обеспечьте его безопасность.
# Положите пострадавшего на спину. Откройте ему рот, следите, чтобы язык не закрывал гортань.
# Одной рукой удерживайте голову и шею пострадавшего, другой зажмите его нос. Глубоко вдохните и, плотно прижавшись ртом ко рту, сделайте выдох.
# Первые 5—10 выдохов делайте быстро (за 20—30 с), следующие— со скоростью 12—15 выдохов в минуту.
# Следите за движением грудной клетки пострадавшего: если после вашего выдоха в рот его грудная клетка поднялась, значит, дыхательные пути проходимы и искусственное дыхание вы делаете правильно.
# Если нет пульса, параллельно с искусственным дыханием необходимо делать массаж сердца.
 
=== Искусственное дыхание «рот-в-нос» ===
Запустите команду vimtutor для быстрого ознакомления с функциональностью редактора.
Проводится, если рот спасаемого повреждён или по каким-либо причинам нельзя использовать метод «рот-в-рот». Не так эффективно, как искусственное дыхание «рот-в-рот», «рот-в-нос» также способно спасти человека.
 
== ВведениеСм. также ==
* [[Реанимация]]
Вот запись типичной сессии работы с vi / Vim:
* [[Искусственный массаж сердца]]
#vi httpd.conf
В открывшемся редакторе:
/SSLVerif'''[Enter]'''nwr1ZZ
 
[[Категория:Дыхание]]
В обычном редакторе, это соответствует:
[[Категория:Медицина]]
* Открыть файл «httpd.conf»
[[Категория:Первая помощь]]
* Открыть диалог поиска
[[Категория:Искусственное дыхание]]
* Ввести в поисковую строку «SSLVerif».
* Перейти ко второму по счету найденному слову
* Перенести курсор к его параметру
* Заменить параметр на 1
* Сохранить изменения
* Закрыть файл
 
Объяснение команд:
* / — Перейти в режим поиска
* Kлавиша '''[Enter]''' — Искать'.
* n — Перейти к следующему вхождению искомой строки
* w — Переместить курсор к следующему слову
* r — Заменить знак под курсором
* ZZ — Сохранить изменения и выйти
 
Здесь я делюсь опытом работы в [[w:Vim|Vim]]’е. Предполагается, читатель имеет установленные vi и vim, а также знаком с основами работы с UNIX-подобной системой.
 
Помнится, когда товарищ установил [[w:FreeBSD|FreeBSD]] на мою домашнюю ЭВМ, некоторые файлы открывались непонятным мне образом. Я быстро старался избавиться от этого несчастья. Через некоторое время я понял, что происходит: в системе по умолчанию, в переменной окружения EDITOR, установлен редактор vi. Я сразу поменял его на 'ee' (easy editor). Это действительно простой редактор, затруднений с ним возникнуть просто не может, однако и особой свободы в нем не испытать. Вскоре его стало не хватать…
 
Описание работы с редактором я привожу в хронологическом порядке — от простого к сложному. Так как Vim на 99 % совместим с Vi, сначала я дам краткое описание работы с vi.
 
Легенда сокращений и специальных символов:
Строки, начинающиеся с символа "#" - командная строка;
<ESC> - нажатие клавишу Escape (или Ctrl-[);
<CR> - ... Enter;
<SHIFT> - ... Shift
^x - ... Ctrl-x
 
== Vi ==
Главное отличие [[w:Vi|Vi]] от других редакторов в том, что у него несколько режимов работы. При этом привычный нам режим ввода текста — не основной. Вместо этого, в обычном режиме vi воспринимает каждое нажатие на клавишу, как команду. Это позволяет мгновенно перемещаться по файлу и быстро осуществлять редактирование.
 
Насколько [[w:Vi|Vi]] быстрее других редакторов? — Давайте сравним. Например, вот действия, которые необходимо выполнить ["продвинутому"] пользователю, чтобы поменять местами две буквы в обычном редакторе и в vi:
 
Обычный редактор:
<Shift-Стрелка вправо>
<Ctrl-x>
<Стрелка влево>
<Ctrl-v>
 
Vi:
xp
 
=== Переключение режимов ===
 
* '''«Обычный режим»''' — перемещение по файлу, стирание текста и другие редактирующие функции. Переход в него из любого другого режима:
<ESC>, иногда 2 раза;
<C-[>
* '''«Режим ввода»''' — ввод текста. Заметьте, что стирание и ввод текста происходит в двух разных режимах. Переход в него из обычного режима:
i;
<Insert>
* '''«Командный режим»''' — Команды (операции с файлом, поиск и замена, настройка редактора…). Переход в него из обычного режима:
:
* '''«Режим поиска»''' — ввод поискового запроса. Переход в него из обычного режима
/
 
=== Открыть/создать файл ===
 
Опишем операции, которые можно производить с файлом в обычном режиме.
 
#vi mamapapa.txt - открыть один файл
#vi mamapapa.txt ++11 - открыть файл и перейти к строке 11.
#vi mama.txt papa.txt - открыть файл mama.txt, после выхода из него открыть файл papa.txt
#vi -о mama.txt papa.txt - открыть сразу все файлы.
 
Файл открывается в обычном режиме с помощью команды vi. Здесь мы можем просмотреть файл, переместиться по его содержимому, стереть текст, но ввести текст в этом режиме нельзя.
 
Создание файла происходит при помощи той же команды. Собственно создание файла происходит в момент сохранения.
Для открытия или создания нового файла в обычном режиме набираем
:e filename
 
Перед этим нужно сохранить предыдущий файл
:w - сохраняет файл с существующим именем
:w filename - сохраняет файл с новым именем
 
=== Перемещение по файлу ===
 
Самые часто используемые в vi клавиши — клавиши перемещения. Это знаменитые h j k l, соответствующие стрелкам влево, вниз, вверх и вправо. Стрелочки тоже работают (при правильном указании терминала). Также можно использовать быстрые клавиши:
 
* 0 ("ноль") — в начало текущей строки;
* ^ — в начало текущей строки (к первому непробельному символу);
* $ — в конец текущей строки
* w — на слово вправо
* b — на слово влево
* W — до пробела вправо
* B — до пробела влево
 
* } — абзац вниз
* { — абзац вверх
 
* <Ctrl-f> — на страницу (экран) вниз
* <Ctrl-b> — на страницу (экран) верх
 
* gg — перейти в начало файла
* G — перейти в конец файла
* <number>G — перейти на конкретную строку <number>
 
* /<text><CR> — перейти к <text>
* ?<text><CR> — то же самое, но искать назад
* n — повторить поиск
* N — повторить поиск назад
 
=== Редактирование файла ===
 
Предположим в нашем файле записан следующий текст:
<blockquote>''—Винни, тебе что намазать на хлеб, мёду или сгущённого молока?
—И того, и другого, и можно без хлеба!
 
—Ну, если вы больше ничего не хотите…
 
— А что, что-то есть ещё?''</blockquote>
 
Диалог симпатичный, но несколько несвязный. Давайте изменим его — для этого необходимо перейти в режим ввода. Самый простой способ — из обычного режима нажатие клавиши «i». После чего можно смело приступать к вводу текста. <ESC> вернет нас к обычному режиму. Другие важные команды:
 
* R — перейти в режим ввода с забиванием текста
* r — заменить один символ
* i — перейти в режим ввода с текущей позиции
* I — переместиться в начало строки и перейти в режим ввода
* a — перейти в режим ввода после курсора
* А — переместиться в конец строки и перейти в режим ввода
* o — перейти в режим ввода с новой строки под курсором
* O — перейти в режим ввода с новой строки над курсором
* x — удалить символ под курсором
* X — удалить символ влево (удалить символ перед курсором)
* d — используется совместно с командами перемещения. Удаляет символы с текущего положения курсора до положения после ввода команды перемещения. Пример: dw - удаляет символы с текущего до конца слова; diw - удаляет слово под курсором
* с — команда аналогичная d, но после удаление переходит в режим ввода. Очень удобная альтернатива команде R
* dd — удалить текущую строку
* d<число>d — стирание числа строк начиная с текущей
* yy — копирование текущей строки в неименованный буфер
* y<число>y — копирование числа строк начиная с текущей в неименованный буфер
* p — вставка содержимого неименнованного буфера под курсором
* P — вставка содержимого неименнованного буфера перед курсором
* J — слияние текущей строки со следующей
* u — отмена последней команды
* . — повтор последней команды
 
Конечно, все сразу запомнить их трудно, даже не надо (к тому же здесь перечислены не все). Уверяю вас, через некоторое время эти команды будут пользоваться спросом.
 
Наконец мы дошли к самому главному — командному режиму. Помним как в него перейти? «:». Шифт-ж если по-русски.
 
=== Запись/выход ===
 
Если вы в режиме ввода, то необходимо предварительно нажать <ESC>, чтобы перейти в обычный режим.
 
ZZ - записать файл и выйти(Если файл не изменяли, то записываться он не будет)
 
:w<CR> - записать файл
 
:sav filename<CR> - "Сохранить как"
 
:w!<CR> - записать файл.
Эта команда может помочь, если файл открыт в режиме "read-only" (с опцией -R), если файл заблокирован другим пользователем, либо отсутствуют такие привилегии, либо еще какая беда. При попытке записи без «!» будет выдано соответствующее предупреждение.
 
:w new_file<CR>
Создать новый файл «new_file» и записать в него текущее содержимое. Если файл существует, будет показано предупреждение. Дальше вы продолжаете работать со старым файлом — mamapapa.txt
 
:q<CR> - выйти из редактора.
Если файл был изменен, у вас ничего не получится. В таких случаях необходимо добавлять после команды «!»:
 
:q!<CR> - выйти из файла, не сохраняя изменения
:qa!<CR> - выйти из всех файлов, не сохраняя изменения
 
=== Коэффициент повторения ===
 
Почти все команды vi принимают так называемый коэффициент повторения. Попросту говоря, если перед командой в обычном режиме вы указываете число, то команда повторяется соответствующее количество раз. Например, команда «j» перемещает курсор на одну строку вниз — «3j» переместит курсор на 3 строки вниз. Результатом команды «iпривет<ESC>», как вы, наверное, догадались, будет вставка слова «привет» — «2iпривет<ESC>» вставит «приветпривет».
 
=== Дополнительные возможности ===
Есть несколько вещей, без которых редактирование похоже на пытку:
^G - показать информацию о файле
:<number> - перейти на строку с номером <number>
:set number - отобразить слева нумерацию строк (:set nonumber - спрятать нумерацию)
:set wrap - переносить длинные строки(:set nowrap - не переносить)
:sy[ntax] on/off - включить/выключить подсветку синтаксиса
:colorscheme <name> - задать цветовую тему (где <name> имя темы, TAB работает как авто-дополнение)
:h или :help - список возможной помощи(:viusage, :exusage)
привести концы строк в файле к виду dos или unix соответственно:
:set fileformat=dos
:set fileformat=unix
Задать размер табуляции в 4 пробела:
:set ts=4
 
== Vim ==
 
=== Главные отличия от vi ===
* Неограниченное число undo/redo. (в 7-ой версии появились деревья)
* Многооконность.
* Поддержка множества буферов. (в 7-ой версии появились закладки)
* Подсветка синтаксиса.
* Редактирование командной строкой.
* Достраивание имен файлов.
* Визуальное редактирование.
* Кроссплатформенность.
* Графический интерфейс (GUI).
* Режим совместимости с vi.
* Проверка орфографии
 
=== Команды ===
Переход к началу файла в Vim отличается от Vi:
gg
Переход к странице под номером <number>:
<number>gg
 
=== Слово под курсором ===
Перейти к следующему вхождению слова под курсором
*
Перейти к предыдущему вхождению слова под курсором
#
Перейти к определению слова под курсором
gd (go definition)
Перейти к редактированию файла (под курсором должен быть путь)
gf (go file)
 
=== Визуальный режим ===
Это существенное расширение возможностей Vi, без которого не обходится ни один «нормальный» текстовой редактор. Режим предназначен для выделения блока текста и дальнейшей работы с ним и состоит из 3-х последовательных шагов:
# Пометка начала блока с помощью «v», «V» или CTRL-V. Блок помечается с того символа на котором находится курсор(по умолчанию).
# Перемещение курсора в конец необходимого блока. Последний символ также будет включен в выделенный блок.
# Вызов необходимой команды.
 
Команда «v» предназначена для выделения текста посимвольно. Символы до и после курсора в строке не будут входить в выделение. Необходима в первую очередь для копирования участков текста в строке.<br />
«V» — для выделения текста построчно.<br />
CTRL-V — для выделения прямоугольного участка текста. Удобна в случае редактирования структурированного текста.
 
С выделенным участком текста можно производить стандартные действия по редактированию(копирование — «y», удаление — «d»). Напомню, что в Vim при удалении участка текста, он автоматически помещается в специальный регистр, что равноценно «вырезанию» участка текста, который потом можно будет вставить с помощью команды «p»(вставка текста после курсора) или «P»(вставка текста перед курсором).
 
=== ~/.vimrc ===
'''vimrc''' — это файл конфигурации Vim. При запуске Vim сначала читает этот файл и применяет записанные в нем настройки. Рекомендуемое расположение этого файла для различных платформ:
Unix-like $HOME/.vimrc
MS-DOS and Win32 $HOME/_vimrc или $VIM/_vimrc
 
Файл конфигурации используется для настройки различных аспектов поведения и внешнего вида Vim.
 
Комментарии в этом файле начинаются с символа '''"''' (двойная кавычка) и продолжаются до конца строки.
 
Для примера приводится выдержка из файла _vimrc автора:
" установить keymap, чтобы по Ctrl+^ переключался на русский и обратно
set keymap=russian-jcukenwin
" по умолчанию - латинская раскладка
set iminsert=0
" по умолчанию - латинская раскладка при поиске
set imsearch=0
" игнорировать регистр при поиске
set ic
" подсвечивать поиск
set hls
" использовать инкрементальный поиск
set is
" ширина текста
set textwidth=70
" минимальная высота окна пусть будет 0 (по умолчанию - 1)
set winminheight=0
" всегда делать активное окно максимального размера
set noequalalways
set winheight=9999
" установить шрифт Courier New Cyr
set guifont=courier_new:h10:cRUSSIAN
" настраиваю для работы с русскими словами (чтобы w, b, * понимали
" русские слова)
set iskeyword=@,48-57,_,192-255
" задать размер табуляции в четыре пробела
set ts=4
Для получения более подробной информации по файлу _vimrc можно набрать в командной строке Vim команду
:help vimrc
 
=== Vim и русская раскладка клавиатуры ===
В обычном режиме Vim по умолчанию ожидает, что консоль находится в режиме ввода латинских символов. Если вы, к примеру, редактируете с помощью Vim текст на русском языке, или в смешанных кодировках (к примеру, HTML-страницу на русском), то постоянная необходимость переключать системную клавиатурную раскладку очень быстро вам надоест. Существует несколько способов решить эту проблему.
==== Способ 1 ====
Сделать так, чтобы русские буквы можно было вводить когда системная раскладка находится в режиме ввода латинских символов.
 
Для этого в файл конфигурации Vim, который называется [[Vim#~/.vimrc|.vimrc]] (или _vimrc в Microsoft Windows) нужно добавить следующие строки:
 
set keymap=russian-jcukenwin
set iminsert=0
 
После этого системную раскладку клавиатуры можно будет оставить в режиме ввода латинских символов, а переключение между языками осуществлять уже внутри самого редактора с помощью команды Ctrl+^ (Ctrl+6 в версии для Windows)
Чтобы настроить переключение языков на другую кнопку (например на F12), можно использовать такие команды:
для режима ввода символов:
:imap <F12> {ctrl-k}{ctrl-6}{ctrl-6}
При этом {ctrl-k} нужно вводить нажатием клавиш <Ctrl> и k. После нажатия {ctrl-k} появится подсвеченный значок вопроса, который потом заменится на код клавиши\комбинации, которую Вы введёте, в данном случае ^^.
 
для режима ввода командной строки:
:cmap <F12> {ctrl-k}{ctrl-6}{ctrl-6}
 
Кроме этого, в версии для Windows Vim по умолчанию не настроен на использование кодировок клавиатуры, содержащих символы кириллицы, например CP1251 и KOI8-R (в версии же для Linux настройка по умолчанию корректна). Как следствие этого, Vim при редактировании русского текста будет неправильно обрабатывать команды перемещения по тексту, основанные на поиске слова, такие как '''w''' (одно слово вперед), '''b''' (одно слово назад), '''*''' (найти в тексте слово под курсором) и т. п. Чтобы настроить Vim для корректной работы с этими командами независимо от языка, достаточно добавить в файл конфигурации [[Vim#~/.vimrc|_vimrc]] следующую строку:
set iskeyword=@,48-57,_,192-255
 
==== Способ 2 ====
Сделать так, чтобы Vim понимал, какие клавиши нажимаются, если включена русская раскладка.
 
Для этого в [[Vim#~/.vimrc|.vimrc]] добавьте строчку:
 
set langmap=ёйцукенгшщзхъфывапролджэячсмитьбю;`qwertyuiop[]asdfghjkl\;'zxcvbnm\,.,ЙЦУКЕHГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ;QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>/
 
После этого Vim будет нормально понимать команды, вводимые при включенной русской раскладке.
 
Если у вас локаль UTF, то данный способ не работает. Необходимо каждый символ назначить индивидуально:
 
map ё `
map й q
map ц w
map у e
map к r
map е t
map н y
map г u
map ш i
map щ o
map з p
map х [
map ъ ]
map ф a
map ы s
map в d
map а f
map п g
map р h
map о j
map л k
map д l
map ж ;
map э '
map я z
map ч x
map с c
map м v
map и b
map т n
map ь m
map б ,
map ю .
map Ё ~
map Й Q
map Ц W
map У E
map К R
map Е T
map Н Y
map Г U
map Ш I
map Щ O
map З P
map Х {
map Ъ }
map Ф A
map Ы S
map В D
map А F
map П G
map Р H
map О J
map Л K
map Д L
map Ж :
map Э "
map Я Z
map Ч X
map С C
map М V
map И B
map Т N
map Ь M
map Б <
map Ю >
 
== Поиск в файлах с выводом в список ==
В Microsoft Visual Studio (возможно и в других IDE тоже) есть очень удобная функция Find In Files. Она ищет заданную строку или регулярное выражение в файлах в заданной папке и выводит результат поиска в виде списка. Если щёлкнуть по строке этого списка то откроется файл в том месте где была найдена заданная строка. Подобная функция есть и в Vim. Чтобы найти в файлах нужную строку надо набрать команду:
:vimgrep /искомая строка/ Путь к файлам | :copen
Более конкретный пример:
:vimgrep /translator/ R:\projects\**\*.txt | :copen
Команда vimgrep ищет строку или регулярное выражение заключенное между символами // в файле или файлах и сбрасывает результаты в специальный буфер. А так же открывает файл с первым найденным результатом. Команда copen открывает буфер с результатами поиска.
Путь к файлам может указывать как на один файл так и на набор файлов. Чтобы путь указывал на несколько файлов надо использовать символы ? и *. Значение этих символов такое же как и в командной строке операционной системы. Чтобы поиск прошел по всем подпапкам указанной папки можно использовать две звездочки **. Пример использования **:
/usr/inc**/*.h
может означать:
/usr/include/types.h
/usr/include/sys/types.h
/usr/inc_old/types.h
 
== Конвертация кодировки файла ==
Vim автоматически конвертирует открываемый файл в текущую кодировку, а при сохранении конвертирует обратно в кодировку файла.
Текущая кодировка задается переменной encoding(enc). Кодировка файла задается переменной fileencoding(fenc). Кодировка файла автоматически определяется при его открытии(или может берется из настроек системы?), но ее можно и задать вручную. Для того, чтобы сохранить файл в нужной кодировке, надо перед сохранением задать соответствующее значение переменной fileencoding.
 
Чтобы узнать список всех доступных значений переменных encoding и fileencoding наберите команду:
:help encoding-values
=== Пример: как сконвертировать файл из cp1251 в utf-8 ===
* Открываем пустой Vim
* Задаем текущую кодировку utf-8 (если она уже не задана по умолчанию):
:set encoding=utf-8
* Открываем интересующий файл. При открывании файл автоматически конвертируется в utf-8
* Задаем кодировку файла utf-8:
:set fileencoding=utf-8
* Сохраняем файл.
 
== Vim при переводах текста, или для чтения английской документации ==
Итак, чтобы можно было успешно читать и переводить документацию на английском языке, нужно ИМХО всего 3 вещи:
* Редактор.
* Переводчик.
* проверка орфографии
 
Если их удобно объединить, то можно получить хорошую среду, для перевода/чтения.
 
=== Что возьмем ===
Редактор мы естественно возьмем VIM хотя бы потому что статья так называется. Переводчик mueller консольная версия, работает так:
% mueller sex
sex [seks] _n. 1> _биол. пол; the weaker sex слАбый пол, жЕнщины; the sterner (или stronger) sex сИльный пол, мужчИны; the sex _шутл. жЕнщины 2> секс 3> _at
tr. половОй, сексуАльный; sex instinct половОй инстИнкт; sex intergrade гермафродИт
 
И орфографмометр: это spell в виме, словари скачаем с vim.org
 
=== Как настроим ===
Мне интересна возможность выпадающего списка, при наведением на неизвестное мне слово мышкой. Для этого, после долгого чтения манов (или гугленья) узнаем что с помошью команды system можно выполнить какое-то действие, вывод которой куда-либо записать. короче пишем где-нибудь в ~/.vimrc
 
function! MyBalloonExpr()
return system("mueller ". v:beval_text)
endfunction
 
set bexpr=MyBalloonExpr()
set ballooneval
set balloondelay=100
 
 
Определили функцию MyBallonExpr которая будет формировать строку mueller [слово на которое навели] и выполнять. Результат выполнения будет выдавать в «балоне» выпадающем окошке, через 100 миллисекунд.
 
Естественно вместо mueller вы можите поставить любую другую программу, которая переводит текст.
 
== Ссылки ==
* [http://www.vim.org Vim.org] — официальный сайт vim — документация, файлы, плагины
* [http://www.opennet.ru/docs/HOWTO-RU/Vim-HOWTO.html Vim-howto] — руководство по использованию vim
* [http://jenyay.net/Programming/Vim Vim. Первая установка]
* [http://gvim.org.ua/ Все о редакторе VI (VIM, GVIM). Форум, документация].
* [http://konishchevdmitry.blogspot.com/2008/07/howto-vim.html Очередной HowTo по Vim] — HowTo, описывающий основные проблемы, возникающие при работе в Vim. Содержит примеры конфигурационных файлов и список наиболее полезных команд.
 
{{wp|Vim}}
 
[[Категория:Программное обеспечение]]
 
[[en:Learning the vi editor/Vim]]
[[pl:Vim]]
[[pt:Vim]]
10

правок

Навигация