#1
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Вес репутации:
0
Регистрация: 27.02.2009
Адрес: Москва
Сообщений: 7,302
Сказал(а) спасибо: 578
Спасибок 2,623
в 1,832 сообщениях |
Основы редактора vim -
18.01.2010, 03:06
Почтенный Vim – любимый редактор многих Linux-профессионалов. Он имеет репутацию трудного в освоении, но стоит трудов, уверяет д-р Крис Браун. Режимы Vim и их функции. комментарий Текстовых редакторов в Linux намного больше, чем вы можете себе представить. Похоже, хотя бы по одному создали каждый человек и его собака. Продукты от собак обычно норовят обнюхивать гнезда на задней панели компьютера, и их, вероятно, лучшеигнорировать, но и без них остается много – emacs, kedit, gedit, kwrite, kate, mousepad, leafpad, fte, joe, jed, nano, pico... список можно продолжить. Но большинство профессионалов Unix и Linux выбирает их общего дедушку, Vi, и его собрата помоложе, Vim. (Vim происходит от «Vi improved» [улучшенный Vi] – это Vi , переписанный в 1991 г. Брэмом Муленаром [Bram Moolenar]. Исходный Vi написал Билл Джой [Bill Joy] в далеком 1976 г. На данном уроке используется Vim, хотя основной набор команд для Vi и Vim одинаков.) Одна из причин популярности Vim – эффективность редактирования даже при отсутствии графического интерфейса: например, если вы перевели машину в однопользовательский режим для профилактики, или это сервер, где не установлен рабочий стол. Vim не самый простой редактор для изучения – его практически невозможно понять без чтения хоть какой-то документации. Не жди те также мгновенной отдачи. Как преподаватель Linux при переходе к разделу о Vim я вижу в глазах студентов ужас. Один парень сказал мне, что если нужно будет редактировать файлы Unix, он скорее скопирует их на дискету и отредактирует в Windows, чем изучит Vim. Это отвращение к Vim’у позорно, потому что, изучив его, вы будете редактировать текст намного быстрее, чем ранее. Так что стисните зубы, прочитайте учебник и станьте Vim-гением. Обычно Vim запускается с именем файла в качестве аргумента. Файл открывается для редактирования, если он существует – а если нет, то создается. Так что начнем с команды vi gpl.txt wget www.gnu.org/licenses/gpl.txt Командный режим Стартуя, Vim входит в командный режим. Большинство команд – это отдельные символы. Классические команды перемещения курсора в Vi и Vim – h, j, k и l, выполняющие перемещение на один символ влево, вниз, вверх и вправо. Мнемоники тут никакой: они выбраны потому, что это базовые клавиши при печати вслепую, и всегда под руками. (В Vim используются также клавиши-стрелки, но поскольку к ним нужно еще передвинуть руку, получается медленнее.) Большинство команд перемещения курсора могут иметь числовой префикс для повтора команды; так, 5j перемещает на пять строк вниз, а 3w – на три слова вперед. В команде G префикс указывает номер строки: например, 23G перенесет вас на 23-ю строку. Поиск в тексте при помощи / и ? – это наискорейший способ перемещения по нему. Искомый текст может быть (ограниченным) регулярным выражением, например, /[Ss]oftware будет искать Software и software. Если вы нашли не тот экземпляр нужной строки, продолжайте вводить n для поиска следующего. Режим вставки Для добавления текста вы должны перейти в режим вставки. Простейшие команды для этого – i, производящая вставку перед текущей позицией курсора, и a, вставляющая после него. Команды I и A укрупненные версии команд i и a; они производят вставку до и после текущей строки соответственно. Команды o и O создают пустую строку ниже или выше текущей, а затем переходят в режим вставки. Будучи в режиме вставки, вы можете вставлять что угодно: от одного символа до нескольких строк. Однако в режиме вставки нельзя перемещать курсор или давать любые другие команды редактирования –для этого придется вернуться в командный режим (хотя есть версии, где можно заставить использовать клавиши-стрелки для перемещения курсора даже в режиме вставки). Имеется лишь один способ вернуться из режима вставки в командный: нажать Esc. Заведите привычку нажимать Esc почаще. Удаление и изменение текста Команда x удаляет один символ. Она имеет префикс повтора, так что 6x удаляет шесть символов. Команда d более мощная, и должна сопровождаться командами перемещения курсора, указывающими объем удаляемого текста. Вот как она работает: d, в комбинации с перемещениями курсора, удаляет текст между его начальным и конечным положением. Например, dw удаляет слово, d3w удаляет три слова, d удаляет все до конца строки, d} удаляет все до конца абзаца, а dG удаляет все до конца файла. Имеется также специальная версия команды d – dd, которая удаляет всю строку. Префикс повтора работает и здесь, так что 3dd удалит три строки. Обождем минутку... не являются ли команды поиска (/ и ?) просто видом перемещения курсора? Можете ли вы использовать их с командой d? Оказывается, можете. Например, d/PUBLIC удалит все до слова PUBLIC (не включая его). Более элегантный пример, d/^[0-9] удалит все до первой строки, начинающейся с цифры. (Когда я преподаю Vim, обычно в этом месте враждебность уступает неохотному признанию силы набора команд.) Команда с (change [изменить]) работает почти как команда d, за тем исключением, что она к тому же переводит редактор в режим вставки. Так что c3w можно рассматривать как указание «изменить три слова»; и так далее. Команда u отменяет последние сделанные изменения. Vim поддерживает многоуровневую отмену – каждая u отменяет одно изменение. В исходном Vi она работает не так. Если вы ввели две u, то вторая отменит действие первой! Режим нижней строки Режим нижней строки используется для всего, но команда нижней строки, без которой не обойтись – это w для записи отредактированного текста в исходный файл и q для выхода. Из командного режима можно перейти в режим нижней строки, набрав :, так что :wq –стандартный способ записать ваш файл и выйти из редактора. Если вы хотите выйти из редактора без сохранения, используйте :q!. Попозже мы рассмотрим другие команды нижней строки. Вы узнали достаточно, чтобы рулить в Vim по крайней мере на второй скорости, но если вы хотите уметь развить суперскорость и выполнить разворот на месте, читайте дальше... Операции вырезания и вставки Vim поддерживает операции вырезания и вставки, используя буфер удалений. Текст, удаляемый вами по команде d, сохраняется в этом буфере и может быть вставлен обратно в новой позиции курсора командой p (положить). Например, переместить текущий абзац в конец файла можно так:
(Сравните-ка эти несколько команд с числом действий мышью, необходимым для выполнения того же действия в редакторе с управлением мышью.) Копирование и вставка выполняются практически так же, за тем исключением, что вы используете команду y вместо d. Команда y «выдергивает» текст – то есть помещает его в буфер удаления, но на самом деле не удаляет. Как и d, она действует совместно с командами перемещения курсора, так что y2) скопирует два предложения, а 4yy скопирует четыре строки. Например, для дублирования текущей строки, наберите yyp, чтобы скопировать строку и вставить копию ниже. Становиться круто Если одного буфера удаления вам мало, то вам будет приятно узнать, что их 26, с именами от ‘a’ до ‘z’. Двойные кавычки используются для указания имени буфера. Например, “t4yy скопирует четыре строки в буфер с именем ‘t’, а “tp вставит содержимое буфера ‘t’. Содержимое именованных буферов сохраняется, пока вы работаете в редакторе или пока вы его не перезапишете. Vim выполняет также «глобальные» подстановки. Допустим, вы решили переделать текст лицензии GPL с американского английского на британский, заменив все слова ‘license’ на ‘licence’. Имеется два способа: ручной и автоматический. Ручной выглядит так:
Если вы просто хотите заменить ‘license’ на ‘licence’ во всем файле насквозь, без просмотра отдельных изменений, можете использовать команду подстановки нижней строки Vim. Для данного примера она выглядит так: :1,$s/license/licence/g
Для настройки Vi и Vim могут использоваться десятки изменяемых опций. Те, что я счел наиболее полезными, приведены в Таблице 2, но их намного больше. Для изменения опции следует использовать команду нижней строки set. Некоторые опции являются логическими – они принимают значения только on [включено] или off [выключено]. Например, для изменения опции автоотступа следует ввести :set autoindent (: служит для перехода в режим нижней строки, помните?). Для выключения этой опции введите :set noautoindent. Имена многих опций к тому же имеют сокращения. Например, автоотступ можно укоротить до ‘ai’, так что :set ai и :set noai тоже сработают. Другие опции имеют строковые или числовые значения. Опция shiftwidth, например, указывает количество символьных позиций, используемых для отступа. Ясно, что это числовое значение, устанавливаемое как-то вроде :set shiftwidth=4. Можно определить «постоянные» значения опций (они будут читаться при каждом запуске Vim), поместив их в файл ~/.vimrc. Например, строка этого файла вида set sw=2 ai запустит Vim в режиме с автоотступом с величиной смещения 2. (Заметим, что в файле .vimrc нет : перед командой set). Фильтрация Среди всех возможностей Vim, одна из моих любимых – это возможность обрабатывать текстовые буферы (или любую их часть) при помощи внешнего фильтра Linux. Фильтрация использует команду !, которая, как и команда d, требует сопутствующих перемещений курсора. Текст между текущей позицией курсора и тем местом, куда он переместится, следуя командам, пропускается через выбранные вами внешние команды, и результат их действия вновь вставляется в текстовый буфер вместо начального содержимого. При использовании команды ! курсор помещается в нижнюю строку, чтобы дать место для ввода команд фильтрации. Более детально о фильтрах я поговорю потом, но пара примеров поможет понять идею. Фильтр cat, с опцией -n, добавит к выводу номера строк.Последовательность команд 1G!Gcat -n выполнит следующее: 1. Перемещение в начало файла (1G) 2. Выбор всего файла для фильтрации (!G) 3. Указание cat -n в качестве фильтра. (Эта часть команды будет выведена в нижней строке.) Заметьте, что вставка номеров строк этим способом и в самом деле добавляет их к буферу редактирования. Это не то же самое, что включение нумерации строк при помощи опции :set number, которая просто велит Vim нумеровать строки на экране. Другой пример: последовательность команд 1G!Gwc запустит wc для всего файла, чтобы выдать нам количество символов, слов и строк. Прочитав это, используйте команду u для отмены изменений и замены вывода команды wc исходным текстом. Наш третий пример фильтрации использует двойную форму команды ! (!!), для работы с полными строками, и использует grep и подходящее регулярное выражение для фильтрации пустых строк. Вот команда: 10!!grep -v ‘^$’. А вот как она работает: 1. 10!! выбирает десять строк для фильтрации. 2. Команда grep -v запускает grep для вывода строк, не соответствующих регулярному выражению. 3. Регулярное выражение ^$ означает «начало строки, за которым сразу же идет конец строки» – то есть соответствует пустым строкам. Функции для программистов В Vi и Vim имеется множество функций специально для программистов. Во-первых, имеется режим автоотступа, активируемый при помощи опции :set ai. При включенном автоотступе, по мере ввода текста, Vim автоматически отодвигает новую строку в соответствии с предыдущей. Если необходимо, вы можете увеличить отступ при помощи ^T или уменьшить – ^D. Для исправления отступов существующих строк, используйте команды > и } увеличит отступ до конца абзаца (то есть до следующей пустой строки). Однако эти команды в основном используются в сдвоенном виде, например, 4>> сделает отступ у четырех строк. По умолчанию, отступ равняется восьми позициям – вероятно, это многовато. Вы можете изменить размер отступа (Vim называет это ‘shiftwidth’) командой вроде :set sw=4. Еще одна дружественная к программистам функция – способ управления различными типами скобок. Если курсор находится на скобке одного из типов (, ), {, }, [ или ], то ввод % переместит курсор к соответствующей скобке того же уровня вложенности. Конечно, вы можете использовать % для перемещения курсора так же, как и команды d, c или y, и если вы редактируете исходный код на языке C, в котором используются фигурные скобки для ограничения блоков, вы можете удалить блок очень просто, поместив курсор к открытой скобке и набрав d%. Кроме того, если вы установите опцию showmatch командой :set showmatch, Vi немедля переместит курсор к соответствующей открывающей скобке каждый раз, когда вы вставите закрывающую скобку, такую как ), } или ]. Исходный Vi не умеет этого делать с угловыми скобками – , и Vim, по умолчанию, тоже; однако вы можете его заставить, добавив к строке опции matchpairs по команде :set matchpairs+= – это пригодится, если вы редактируете HTML или XML-документы. Кроме того, имеется подсветка синтаксиса, которую лично я не очень люблю, хоть и знаю, что многие программисты считают ее полезной. Исходный Vi ее не поддерживает, поскольку терминалы тех дней могли отображать только один цвет (обычно зеленый). В Vim она включается при помощи команды нижней строки :syntax enable. Vim автоматически распознает тип файла и загружает соответствующую цветовую схему. Мы только начали... Имеется еще много команд и опций Vim, для которых у нас просто нет места. Если вы читаете это, будучи экспертом Vi, и я пропустил вашу любимую функцию, пожалуйста, простите меня! Втиснуть в четыре страницы все, что пользователи Vi считают заслуживающим внимания, просто невозможно, так что рассматривайте это как беглое введение. Есть расширенная документация по Vim на Vim documentation : vim online и PDF-версия книги Стива Оллина [Steve Oualline] о Vim на www.truth.sk/vim/vimbook-OPL.pdf. И заметьте, что даже я готов признать: нужно быть большим энтузиастом редактора, чтобы для ознакомления с его работой пуститься читать 572-страничную книгу... Врезка Произносите правильно Vi следует произносить как «ви-ай». Вы опозоритесь перед знатоками Unix, если произнесете это как «вай». И уж точно не следует говорить «шесть», как предложил один мой коллега, вообразивший, что он происходит от римлян... Немного истории Дизайн Vi станет более понятен, если рассматривать его в контексте устройств, существовавших в 1976 г., когда Билл Джой написал его. Типичным терминалом того времени был Lear-Siegler ADM3A, машина на основе ЭЛТ-монитора (перейдите по ссылке Other Items of Interest – и увидите такую). ADM3A имел полную QWERTY-клавиатуру, но без функциональных клавиш и стрелок, имеющихся на современной клавиатуре. Дизайн Vi отражает эти ограничения: все перемещения курсора и операции редактирования могут быть выполнены без их использования. ADM3A был одним из первых терминалов, имевших адресуемый курсор (то есть вы могли отсылать ему специальные последовательности ASCII-символов для определения места появления на экране следующего символа). Сейчас мы принимаем это как должное, но тогда это была новация, и она вызвала всплеск активности: люди стали писать настоящие «экранные редакторы» для замены прежних строковых редакторов. Такие терминалы подключались к компьютерам через последовательный порт – либо напрямую, либо при помощи телефонных соединений по модему, который тогда предоставлял скорость обмена 300 или (у везунчиков) 1,200 bps. В некоторых экранных редакторах после удаления строки и вставки пары слов вы могли за время обновления экрана успеть не то что выпить, а наварить пива. Одним из преимуществ Vi была эффективность обновления экрана, наряду с возможностью управлять большим числом терминалов, используя базу данных termcap. В последних версиях Vi и Vim все еще есть переменная среды TERM, определяющая тип терминала. Базовые команды Перемещение курсора
Переход в режим вставки
Опции Vim
Источник |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#2
|
|
Вес репутации:
0
Регистрация: 27.02.2009
Адрес: Москва
Сообщений: 7,302
Сказал(а) спасибо: 578
Спасибок 2,623
в 1,832 сообщениях |
26.02.2010, 00:35
Еще несколько советов по vim
Отступы Достаточно часто различные проекты используют разные стили кодирования и одним из условий может быть использование определенного стиля отступов. Например, в стандартной библиотеке Python для кода Python используются отступы 4-мя пробелами, а для кода C - отступы табуляцией равной 8-ми пробелам. Для изменения отступов в Vim используются следующие опции:
PHP код:
Строка статуса Мне нравится когда информация о файле всегда на экране и поэтому в файле конфигурации ~/.vimrc я использую следующие команды: PHP код:
В повседневной работе очень часто использую графический интерфейс через GVim. Вот несколько команд из моей конфигурации ~/.vimrc: PHP код:
Постоянно забываю как подключить проверку русской орфографии, поэтому здесь этот раздел. С FTP сервера Vim нужно забрать два файла с расширениями .spl и .sug для нужного языка и кодировки. Для русского языка в моем случае это: ru.utf-8.spl и ru.utf-8.sug. После этого эти файлы нужно положить в директорию ~/.vim/spell/ и для включения проверки выполнять следующую команду: :setlocal spell spelllang=ru Файл конфигурации (Версия 0.2 (30.12.2008)) для Vim, в том числе включающий некоторые примеры выше: PHP код:
<!-- Вопросы задаем на форуме, не в ЛС --> |
#3
|
|
Вес репутации:
0
Регистрация: 25.02.2010
Сообщений: 9
Сказал(а) спасибо: 3
Поблагодарили 1 раз
в 1 сообщении |
vim -
04.03.2010, 01:15
Возник не решаемый прецендент я работаю под виндой а редактировать приходиться в линуксовом и втала проблема что выделяя столб предложений разной длины в визуальном режиме выделение проходит только по длине нижнего в столбе предложения,а при вставке столба между другими столбами происходит сдвиг . ничего понять не могу
|
#4
|
|
Вес репутации:
0
Регистрация: 27.02.2009
Адрес: Москва
Сообщений: 7,302
Сказал(а) спасибо: 578
Спасибок 2,623
в 1,832 сообщениях |
04.03.2010, 01:28
А если попробовать выровнять сдвинутый текст
##################################### Форматирование текста команды: :ce - выравнивает строку по центру :ri - выравнивает строку по правому краю :le - выравнивает строку по левому краю Но как выровнять текст, что называется, «по параграфам»? Чтобы левый и правый край были ровными. Помощь Vim говорит, что для этого нужно использовать внешнюю программу. Но есть и другое решение. Подключаем макрос (идет в стандартной поставке): :source $VIMRUNTIME/macros/justify.vim Несмотря на то, что мы задали фиксированную ширину, при редактировании текста может получиться ситуация, когда одна строка окажется длиннее, или, напротив, короче. Это вполне логично — поскольку строка заканчивается символом переноса строки, который может быть затерт или смещен влево. Привести абзац к фиксированной ширине можно выделив текстовый блок в визуальном режиме и воспользоваться командой «gq». Добавлено через 2 минуты И еще: Первоначальные сведения о работе редактора Про командный режим, режим вставки, навигации по тексту и т.п., написано более чем достаточно. Однако все это можно свести к одной команде — vimtutuor. Это, как понятно из названия, обучалка базовым принципам Vim. Если вашим дистрибутивом является Ubuntu, то сперва необходимо установить полную версию редактора: sudo apt-get install vim-full Наиболее важным вопросом, на который следует ответить перед использованием Vim для обработки текста — это перенос набранного текста по строкам. По умолчанию редактор будет писать текст одной длинной строкой, границей которой будет нажатие клавиши Enter. Это хорошо для редактирования исходного кода, но совершенно неприемлемо для написания текста. Решения здесь два. Использовать команду :set wrap :set tw=80 При достижении указанного значения, редактор перейдет на другую строку, поставив символ окончания строки. Вот еще есть очень много инфо по vim тут http://gvim.org.ua/vim_faq |
#5
|
|
Вес репутации:
0
Регистрация: 25.02.2010
Сообщений: 9
Сказал(а) спасибо: 3
Поблагодарили 1 раз
в 1 сообщении |
04.03.2010, 02:46
хорошо когда есть кто подскажет
|
#6
|
|
Вес репутации:
0
Регистрация: 27.02.2009
Адрес: Москва
Сообщений: 7,302
Сказал(а) спасибо: 578
Спасибок 2,623
в 1,832 сообщениях |
04.03.2010, 13:25
Цитата:
Сообщение от marsei
хорошо когда есть кто подскажет
|
Ответить |
Опции темы | |
Опции просмотра | |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
FAQ Необходимые основы | Vector | Статьи и FAQ | 3 | 01.04.2009 23:58 |