vim

В прошлый раз не рассказали что делать, если автоматическая обработка этого пространства невозможна и его надо обрабатывать вручную. Самое страшное что может случиться с пользователм виндоус -- это редактирование чего-нибудь в нотпаде. Причем это страшное случается достаточнчно регулярно, если администрировать систему. Но, как правило, для управления системой естьспециальные инструменты.

У нас же для управления системой именно текстовые файлы, осталось только их научитьсяр редактировать. Здесь присутсвующим не надо объяснять различия между гладким текстом и текстом которые кушает текстовый проыессор. Нотпад -- редактор текста. Ворд или Вордпад -- текстовые процессоры, которые работают с размеченныим документами, и даже не показывают нам саму эту азметку.

Нам надо редактировать имеенно текстовый файл, возмможно структурированный. Это может быть хмл, или ещё что-то, но разметка нам видна. Та же задача стоит у маленьких не индус-триальных программистов. Это задача внесения каких-тоизменений в уже существующих изменеий в кем-то когда-то написанный структурированный текст. Текстовый редактор в системе существует не длятого, чтобы тексты создлавать. А при взаимодействии с операционкой мы тексты модифицируем. Причем не просто так, а сообразно их структуре. Отсюда мы имем потреность в интерактивном инсрументе работы с структурированным текстовым файлом ориентированном на модификацию этих текстов. Возникает великий соблазн привязать интерактивный инструмент к инструментам пакетнойобработки -- авк, сед. ед. Почему бы не оставить тот же самый механизм взаимодействия с текстом -- команды, но позволить это делать в непрерывном цикле разработки-тестирования-отладки. Открыть текстовый редактор и в него давать те же команды, что вы давали седу.

Отчасти в такой форме оно и существует. У такого странного подхода к редактированию текста есть предшественник. Сейчас мало кто знает о существовании в csh возможности редактирования командной строки командами. Даете шелу команду отредактировать предыдущую команду и выполнить её по другому. Происхождение от телетайпов, на которых и стрелочек то не было. Идея не нова, но ни редкатор ед, ни интерактивные командные редакторы шелолов не учитывают что перед вами целый экран. Не командная строка, а матрица. Хотелось бы заниматься интерактивной модификацией текста, а не одной строки, используя весь экран. Нужна одновременная работа с блоком текста, массивом строк. Потому что структурированный текст потому и структутирован, что состоит из массива строк, который вы наблюдаете.

Мы получаем некий инструмент, который нам показывает массив строк и первым делом предоставляет интерфейс по модификации этих самых строк.

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

Команды следующих классов

Это прежде всего навигация по тексту -- по словам, скобочкам, абзацам, началам/концам строки

Осуществление поиска

Модификации. Они, как правило, простые и требуют наджатия 2-3 клавиш. Никто не заморачивается их визуальным предсталвнием. Тык-тык-тык и всё.

Есть ещё режим вставки, это как раз то, в чём работают все остальные редакторы. Есть режим замены, используется редко.

Есть ещё редим командной строки. Для команд толще 2-3 символов есть режим командной строки. Это те команды, которые надо показывать.

Есть ещё визуальный режим, н лектор считает, что он для извращенцев, надо пользоваться регулярными выражениями.

Какие команды бывают в командном режиме?

Лектор и для просмотра файлов пользуется вимом, потому что он красиво раскрашивает и там дикое количество инструментов навигации по тексту. Кромее пейджа пейдждаун и стрелки есть их повторы на клавиатуре hjkl. Byjulf 'nbv ghb[jlbnmcz jgkmpjdfnmcz? yfghbvth rjulf e dfc ytghfdbkmyj jghtltkztncz nbg nthvbyfkf/ Yf;bvftnt yf cnhtkreа у вам появляется А.

Ctrl-D Ctrl-U CTRL-B CTRL-F переходы на полстраницы и на страницу туда-обратно. Принцип аббревиативности -- командна привзянан буквенно к действию. U up B Back F Forward Перемещений по словам 6 штук w b e W B E для маленьких букв слово -- идентификатор(по умолчанию, как в си) а большие буквы -- слово как последовательность неразделителей. Forward Backward End

Очень забавная команда перехода % -- переходит на парную скобку.

Есть переходы завязанные на абзацы -- {} . Абзацами по умолчанию считаются последовательности непустых строк.

Команда поиска, она же команда по перемещению.

/регвыр поиск вниз

?регвыр поис вверх

n -- следующее, N предыдущее вхождение.

+- enter space

Перемещение внутри колонки F(ind)/f -- на символ, за символом который ищете. T t , ;

номер | -- позиционирование на номер колонки

Ещё можно поставить маркер, а потом на него прыгнуть

mбуква ставит метку

`буква переходит на метку

'буква gtht[jlbn yf cnhjre c vtnrjq

у своя семантика.

Зачем такая бездна команд навигации по тексту. По одной простой причине -- команды навигации текста жестком привязаны к командам перемещения. Команд можификации -- удаление d и замены c.

У любой команды вима необязательный параметр число. Ставите число, набираете команду, и команда выполниться столько раз, сколько указано.

d delete

c change

[число]d к. перемещения

[число]c к. перемещения

Удалить три слова

d3w

d% удалить все что в скобках

D удалить строку.

Кроме принципа аббревиативности есть ещё принцип сокращений. Наиболее частые команды привязаны к наиболее удобным клавишам. D это тоже самое, что d$.

Самая главная команда change. Она удаляет то что написано и переходит в режим вставки. После чего начинаете вставлять текст.

A= abcde+7 надо заменить на A = realv + 7.

cf7 -- чендж до семи включительно.

После подачи команды модификации можно не задумываться что там есть.

Поэтому в виме редко используется режим замены (R). Как правило для случаев не связанных с модификацией текста.

C удалить до конца строки и перейти в режим вставки. Разумеется в виме можно перейти в режим вставки минуя команду чейндж. i a. A -- режим вставки начиная с конца строки. I в редим вставкти перед первым непробелом в строке.

Чтобы выйти из режима вставки надо нажать клавишу Esc. Работа человека в консоли с неотключенным белл сопровождается постоянным попискиванием. Если у человека попискивает -- либо он пишет длинную строку в комнадной строке и использует таб, который пищит прелагая выбор, либо он пшет в виме иногда задевает еск.

КАкие ещё бывают гнездовые команды. Команды сдвига. Номер, сдвиг и команда перемещения.

Сдвиг на один индент

y(ank) -- запомнить содержимое в буфер. Надо отметить, что сейндж с делитом тоже запоминают в буфер. Y запоминает строчку целиком

p(aste) -- вставить.

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

Их общий вид будет

["карман(1 бууква)][#]к команда перемещения

Что бы немноко придать происходящему остроты -- есть команда @ карман -- она выполняет команды из кармана

"ay$ @a

В ви андо было одно. В виме сделали дерево анду и реду. Это уже даже для не просто людей с раздвоением, а для людей с деревом личности.

u - анду.

U - отмена сех действий в данной строке.

Командная строка

Когда надо вводить большие команды требующие визуального контроля.

Что там нужно?

В первую очередь работу с файлами.

:w filename

:e filename

:split

:[context adress] w [!] [name]

:/aaa/20 r file.txt -- удалит 20 строчек после нахождения aaa и вставит туда файл.

:[context adress]! shell command

:.,$'.sort

отсортировать.

В контекстном адресе $ это конец файла.

"Доллар это символ конца".

Ещё часто используется поиск с заменой.

:[context adress]s/regexp/podstanovka/g

:[context adress]s/regexp/podstanovka/c

:[context adress]s/regexp/podstanovka/i

% в контекстном адресе -- пройтись по всему файлу.

Параметроы настройки тоже передаются через командную строку. Настраивается абсолютно всё.Включать выключать подсветку и номера строк, итд, итп. Команда set.

Как выйти из редактора с сохранением

ZZ

без сохранения

:q!Enter

:ab ид фраза -- аббревиатура. Макрос для бедных. вы вводите в режиме вставке ид и после нажатия разделителя он заменяется на фразу.

Лектор использовал для частой переписки с начальником идентификатором АВ.

Более универсальный инструмент это мапы. МОжете напялить на любую последовательность клавиш последовательность команд.

map <F9> :make

у лектора по F4 выполняется команда из коментария

мапы это не алиасы для команд, аэто преращение одной последовательности клавиш в другую.

:make это ипостась вима, имеющая отношения к программированию. Это фильтр, запускающий специальную команду(обычно мейк), вывод её кушается специальным регэкспом и показывает вам список ошибок и по ним можно скакать.

Главная фича вима в плане поддержки разработки -- поддержка ctags. Навигация по семантике. Ctrl скобочка -- переход на дефенишн, Ctrl t обратно.

vimdiff

diffput diffget

смотреть диффы, принимать не принимать.

А, ещё есть фолдинг кода. Он там может быть по чему угодно -- хоть по функциям, хоть по строкам, хоть по скобочкам.

Когда делаете вимдифф одинаковые тексты зафолдены в линейку.

Основное что надо помнить про такие инструменты -- для решения вашей задачи всегда есть эффективный путь. Не надо 10 раз тыкать делит или чертыхаться мотаясь между режимом вставки и обартно. Посмотрите документацию.

Общий принцип -- елси вы решаете задачу больше чем 3 раза, оправдается изучение документации и потом применение полученных знаний.

Юниксоид который за 3 часа пишетпрограмму, которая за 5 сеунд делает то, что обычный человек делает за час. ы

LecturesCMC/GnuLinuxArchitecture2012/Conspects/05 (last edited 2012-05-01 19:43:05 by Allena)