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 сеунд делает то, что обычный человек делает за час. ы