Среди текстовых редакторов, используемых программистами, самыми важными является vi и его вариации. В обновленном издании пользователи Unix и Linux изучат основы редактирования текста как в vi, так и в Vim (vi improved), прежде чем перейти к более продвинутым инструментам в каждой из программ. Авторы Арнольд Роббинс и Элберт Ханна описывают основные новейшие версии Vim.
Если вы программист или компьютерный аналитик, либо работаете с веб- или консольными интерфейсами, Vim упростит решение сложных задач. Вы освоите многооконное редактирование, глобальный поиск/замену и прочие мощные инструменты для программистов, а также научитесь писать интерактивные макросы и сценарии, расширяющие возможности программы.
Эффективная навигация
Конечно, вы не только будете создавать новые файлы, но и потратите много времени на редактирование уже существующих. Просто открыть файл на первой строке и перемещаться по нему построчно — неэффективно. Иногда требуется быстро добраться до определенного места в тексте и начать работу оттуда.
Все изменения начинаются с позиции, куда вы поместили курсор и откуда вы хотите начать редактирование (или с места, определяемого с помощью команд редактора ex через номера строк, подлежащих редактированию). В текущей главе мы расскажем, как перемещаться по содержимому файла различными способами (по экранам, тексту, поисковым запросам (шаблонам) и номерам строк). Существует множество способов перемещения в vi и Vim, поскольку скорость редактирования зависит от того, как быстро вы можете добраться до нужного места в файле всего за несколько нажатий клавиш.
Здесь мы изучим:
- перемещение по экранам;
- перемещение по текстовым фрагментам;
- перемещение путем поиска;
- перемещение по номерам строк.
Перемещение по экранам
В книгах позиция обозначается номером страницы: страница, на которой вы остановились, или ее номер в индексе. При редактировании файлов такой роскоши нет. Некоторые файлы занимают всего несколько строк, и вы можете окинуть весь файл одним взглядом. Но многие из них содержат сотни (или тысячи!) строк.
Представьте, что файл — это текст на длинном рулоне бумаги. Экран представляет собой окно из 24 (чаще всего) строк текста на этом рулоне.
В режиме ввода вы фактически набираете текст в нижней строке экрана. Когда вы дойдете до конца и нажмете клавишу Enter, верхняя строка исчезнет из поля зрения, а внизу экрана появится пустая строка для нового текста. Это называется прокруткой документа.
В командном режиме вы можете перемещаться по файлу, чтобы просмотреть весь текст, прокручивая экран вперед или назад. Поскольку перемещение курсора допускается задавать числовыми параметрами, можно быстро перемещаться в любое место вашего файла.
Прокрутка экрана
В vi доступно несколько команд для прокрутки вперед и назад по файлу на полном и половинном экранах:
- ^F — прокрутка вперед на один экран;
- ^B — прокрутка назад на один экран;
- ^D — прокрутка вперед на половину экрана (вниз);
- ^U — прокрутка назад на половину экрана (вверх).
В этом списке команд символ ^ представляет клавишу Ctrl. То есть команда ^F подразумевает, что нужно удерживать нажатой клавишу Ctrl и одновременно нажимать сочетание клавиш Shift+F.
Существуют также команды для прокрутки экрана вверх на одну строку (^E) и вниз на одну строку (^Y). Однако эти две команды не затрагивают курсор. Он остается в той же точке строки, в которой он находился в момент выполнения команды.
Изменение положения экрана с помощью команды z
Если вы хотите прокрутить экран вверх или вниз, но чтобы курсор оставался в той строке, на которой вы его оставили, используйте команду z:
- z Enter и z+ Enter — переместить текущую строку в верхнюю часть экрана и прокрутить;
- z. — переместить текущую строку в центр экрана и прокрутить;
- z- — переместить текущую строку в нижнюю часть экрана и прокрутить.
Бесполезно добавлять числовой параметр для команды z (в конце концов, переместить курсор в верхнюю часть экрана можно только один раз, повторение одной и той же команды z ничего не изменит). В свою очередь, команда z понимает числовой параметр как номер строки, к которой необходимо переместиться. Например, z Enter перемещает текущую строку в верхнюю часть экрана, но 200z Enter переходит к строке 200, отображая ее в верхней части экрана.
Некоторые дистрибутивы GNU/Linux поставляются с файлом /etc/vimrc, который устанавливает для Vim параметр scrolloff (смещение прокрутки) с ненулевым значением (обычно пять). Другие используют файл /usr/share/vim/vimXX/defaults.vim, где XX — версия Vim. Параметр scrolloff в ненулевом значении приводит к тому, что Vim всегда предоставляет соответствующее количество строк контекста выше и ниже курсора. Таким образом, вы поймете, почему при вводе команды z Enter, чтобы поместить текущую строку в верхнюю часть экрана, она помещается всего на несколько строк ниже верха экрана.
Этот параметр также влияет на команды H и L (см. подраздел «Перемещение по видимой части экрана» далее в данной главе) и, возможно, на другие.
Вы можете отменить действие такого параметра по умолчанию, присвоив параметру scrolloff значение ноль в файле .vimrc на вашем компьютере (для получения дополнительной информации об этом файле см. разделы «Настройка vi и Vim» в главе 7 и «Системные и пользовательские конфигурационные файлы» в главе 8).
Перерисовка экрана
Если вы используете vi или Vim в окне терминала, во время редактирования на экране могут отображаться системные сообщения (такое может происходить, если вы вошли в систему удаленного сервера). Эти сообщения не становятся частью вашего буфера редактирования, но мешают работе. При их возникновении вам необходимо повторно обновить или перерисовать изображение на экране.
Всякий раз при прокрутке вы обновляете часть (или весь) экрана, поэтому от нежелательных сообщений можно избавиться, прокрутив экран, а затем вернувшись в предыдущее положение. Вы также можете перерисовать экран без прокрутки, нажав Ctrl+L.
Перемещение по видимой части экрана
Перемещаться по экрану можно, используя следующие команды:
- H — команда «домой» — перейти к первому символу в начале верхней строки экрана;
- M — перейти к первому символу в начале средней строки экрана;
- L — перейти к первому символу в начале последней строки экрана;
- nH — перейти к первому символу в начале n-й строки, считая от верхней;
- nL — перейти к первому символу в начале n-й строки, считая от нижней.
Команда H перемещает курсор из любого места на экране на первую или «начальную» строку. Команда M перемещает курсор к средней строке, а L — к последней. Чтобы перейти к строке под первой, используйте команду 2H.
Перемещение по строкам
На текущем экране также есть команды для перемещения по строкам.
Вы уже знакомы с командами j и k. Кроме того, вы можете использовать:
- Enter — переход к первому непустому символу следующей строки;
- + — переход к первому непустому символу следующей строки (то же, что и Enter);
- – — переход к первому непустому символу предыдущей строки.
Эти три команды перемещают курсор вниз или вверх до первого символа строки, игнорируя любые пробелы или табуляции. Команды j и k, напротив, перемещают курсор вниз или вверх до первой позиции строки, даже если эта позиция пуста (и предполагается, что курсор начался с первой позиции).
Перемещение по строке
Не забывайте, что команды h и l перемещают курсор влево и вправо, а команды 0 (ноль) и $ — в начало и конец строки соответственно. Также можно использовать следующие команды:
- ^ — переход к первому непустому символу текущей строки;
- n| — переход к символу в столбце n текущей строки или в конец строки, если значение n больше количества символов в строке.
Как и в случае с командами перемещения строки, показанными ранее, ^ перемещает к первому символу строки, игнорируя любые пробелы и отступы; 0, напротив, перемещает в первую позицию строки, даже если эта позиция пуста.
Перемещение по текстовым фрагментам
Перемещаться в файле vi также можно по текстовым фрагментам — словам, предложениям, абзацам или разделам. Вы уже научились перемещаться вперед и назад по слову (w, W, b или B). Кроме того, вы можете использовать следующие команды:
- e — перейти в конец текущего слова (слова, разделяемые знаками препинания и пробелами);
- E — перейти в конец текущего слова (слова, разделяемые пробелом);
- ( — перейти к началу текущего предложения;
- ) — перейти к началу следующего предложения;
- { — перейти к началу текущего абзаца;
- } — перейти к началу следующего абзаца;
- [[ — перейти к началу текущего раздела;
- ]] — перейти к началу следующего раздела.
Чтобы найти конец предложения, vi и Vim ищут один из этих знаков препинания: ?,. или!.. vi определяет конец предложения, когда за знаком препинания следует по крайней мере два пробела или когда он появляется как последний непустой символ в строке. Если вы оставили только один пробел после точки или если предложение заканчивается кавычками, то vi не распознает предложение. Программа Vim не настолько старомодна и требует только один пробел после завершающего знака препинания.
Абзац определяется как текст до следующей пустой строки или до одного из макросов абзаца по умолчанию (.IP, .PP, .LP или .QP) из пакета макросов troff. Аналогично раздел определяется как текст вплоть до следующего макроса раздела по умолчанию (.NH, .SH, .H1 или .HU). Макросы, которые распознаются как разделители абзацев или разделов, можно настроить с помощью команды :set, как описано в главе 7.
Напомним, что вы можете комбинировать числа с командами перемещения. Например, 3) перемещает вперед на три предложения. Также вы можете редактировать текст с помощью команд перемещения: d) удаляет текст до конца текущего предложения, 2y} копирует (помещает в буфер) два абзаца впереди.
Помните также, что вы можете использовать команды движения с командами редактирования, такими как cw и ce. Роберт П. Дж. Дэй с интересом отмечает, что «команды w и e — это немного разные команды перемещения, в то время как команды изменения cw и ce делают одно и то же».
Перемещение путем поиска
Одним из наиболее полезных способов быстрого перемещения по большому файлу является поиск фрагмента текста или, точнее, символов по шаблону (pattern). Иногда поиск используется, чтобы найти слово с ошибкой или переменную в программе.
Команда поиска — это специальный символ / (слеш). При вводе слеша он появляется в нижней строке экрана. Затем наберите текст, который хотите найти: /шаблон.
В качестве запроса (его шаблона) может выступать как целое слово, так и любая другая последовательность символов (которая называется символьной строкой). Например, если вы ищете символы red, вы найдете как слово red целиком, так и слова, где эти символы встречаются, например occurred. Если вы добавляете пробел до или после шаблона, то он также учитывается. Для завершения команды необходимо нажать клавишу Enter.
Программы vi и Vim, как и все другие редакторы Unix, имеют специальный язык сопоставления шаблонов, который позволяет выполнять сложные текстовые запросы: например, любое слово, начинающееся с заглавной буквы, или слово The в начале строки. Мы поговорим об этом мощном синтаксисе в главе 6. На данный момент считайте шаблон словом или фразой.
Редактор начинает поиск с позиции курсора и движется вперед, а по достижении конца документа переходит к его началу. Курсор при этом переместится к первому совпадению с шаблоном поиска. Если таковое отсутствует, в строке состояния отобразится сообщение Pattern not found.
На примере файла practice посмотрим, как перемещать курсор с помощью поиска.
Обратите внимание, что вы можете ввести любую комбинацию символов, а не только слово целиком.
Чтобы искать в обратном направлении, введите? вместо /:
?шаблон
В обоих случаях при необходимости поиск охватывает начало или конец файла.
Повторный поиск
Последний шаблон, который использовался для поиска, остается доступным на протяжении всего сеанса редактирования. После выполнения поиска вместо того, чтобы повторно нажимать клавиши для данной операции, вы можете использовать следующие команды vi:
- n — повторить поиск в том же направлении;
- N — повторить поиск в противоположном направлении;
- /Enter — повторить поиск вперед;
- ?Enter — повторить поиск назад.
Поскольку последний шаблон остается доступным, вы можете найти совпадения, поработать с ними, а затем снова осуществить поиск по тому же шаблону, используя команды n, N, / или?.. Направление поиска (/ — вперед,? — назад) отображается в левом нижнем углу экрана. Программа Vim предоставляет более широкие возможности, чем vi. Она помещает текст поиска в командную строку и позволяет прокручивать сохраненную историю команд поиска с помощью клавиш со стрелками ↑, ↓. В пункте «Знакомство с окнами истории» подраздела «Удвойте удовольствие» в главе 14 обсуждается, как в полной мере использовать сохраненную историю поисковых запросов.
Чтобы продолжить работу с предыдущим примером, когда шаблон scr еще доступен для поиска, вы можете проделать следующее.
Иногда нужно найти слово, которое находится впереди от текущего положения курсора, без перехода в начало файла. Для этого существует параметр wrapscan, который определяет, когда завершается поиск. Вы можете ограничить поиск следующим образом:
:set nowrapscan
Когда задан параметр nowrapscan и прямой поиск завершается неудачей, в строке состояния vi отображается следующее сообщение:
Address search hit BOTTOM without matching pattern
В Vim оно выглядит так:
E385: search hit BOTTOM without match for: foo
Когда параметр nowrapscan установлен и обратный поиск завершается неудачей, в сообщениях отображается слово TOP вместо BOTTOM.
Редактирование с помощью функции поиска
Вы можете комбинировать символы / и? с командами, которые изменяют текст, такими как c и d. В продолжение к предыдущему примеру…
Обратите внимание, что удаление происходит посимвольно, а не целыми строками.
В этом разделе приводится лишь базовая информация о поиске по шаблону. В главе 6 вы узнаете больше о шаблонах и их использовании при внесении крупных изменений в файл.
Поиск в текущей строке
Существуют также сокращенные версии команд поиска, выполняемых в пределах текущей строки. Команда fx перемещает курсор к следующему экземпляру символа x (где x — это любой символ). Команда tx перемещает курсор на символ перед следующим экземпляром x. (f — сокращенно от find; t — сокращенно от to, что означает в данном случае «до».) Затем можно повторить поиск, нажав клавишу; (точка с запятой).
Команды поиска внутри строки кратко описаны ниже. Ни одна из них не перемещает курсор на следующую строку:
- fx — найти (переместить курсор к) следующее вхождение x в строке, где x — любой символ;
- Fx — найти (переместить курсор к) предыдущее вхождение x в строке;
- tx — найти (переместить курсор к) символ перед следующим вхождением x в строке;
- Tx — найти (переместить курсор к) символ после предыдущего вхождения x в строке;
- ; — повторить предыдущую команду поиска в том же направлении;
- , (запятая) — повторить предыдущую команду поиска в противоположном направлении.
Добавив к любой из этих команд числовой параметр n, вы сможете определить местонахождение n-го символа. Предположим, вы редактируете файл practice в этой строке:
With a screen editor you can scroll the
Есть несколько вариантов найти вхождения буквы o.
Команда dfx удаляет все символы до именованного символа x включительно. Эта команда полезна при удалении или копировании фрагментов строк. Возможно, вам придется использовать команду dfx вместо dw, если в строке есть символы или знаки препинания, которые затрудняют подсчет слов. Команда t работает так же, как и f, за исключением того, что она помещает курсор перед искомым символом. Например, команда ct. может использоваться для изменения текста до конца предложения, оставляя точку.
Перемещение по номерам строк
Строки в файле нумеруются последовательно, и вы можете перемещаться по файлу, указывая их номера.
Номера строк помогают определить начало и конец больших фрагментов текста. Они также полезны программистам, поскольку сообщения об ошибках компилятора ссылаются на номера строк. Наконец, они используются командами редактора ex, о которых вы узнаете в следующих главах.
Если вы собираетесь перемещаться по номерам строк, у вас должен быть способ их идентификации. Они отображаются на экране с помощью параметра :set nu, описанного в главе 5. Вы также можете отобразить номер текущей строки внизу экрана.
Команда Ctrl+G в программе vi отображает в нижней части экрана текущий номер строки, общее количество строк в файле и какой процент от общего числа представляет текущий номер строки. Например, для файла practice команда Ctrl+G выдает следующее:
"practice" line 3 of 6 --50%--
Результат этой команды в Vim выглядит так:
"practice" 4 lines --75%-- 3,23 All
Предпоследнее поле — это позиция курсора (строка 3, символ 23). В больших файлах последнее поле указывает, насколько далеко вы продвинулись в файле в процентном соотношении.
Комбинация Ctrl+G поможет найти номер строки, необходимый для выполнения команды, а также сориентироваться в тексте, если вы отвлеклись от редактирования.
Если вы изменили файл, но еще не упели записать его, в строке состояния после имени файла можете увидеть надпись [Modified].
Команда G (перейти к)
Номера строк могут использоваться для перемещения курсора по файлу. Команда G (перейти к) принимает номер строки в качестве числового аргумента и переходит непосредственно к этой строке. Например, команда 44G перемещает курсор в начало строки 44. А G без номера строки переместит курсор на последнюю строку файла.
Две обратные кавычки (``) возвратят вас в исходное положение (в котором была выполнена последняя команда G), если вы не внесли каких-либо изменений за это время. Если же правки были осуществлены, а курсор перемещен с помощью какой-либо команды, отличной от G, то команда `` вернет курсор в позицию последнего редактирования. Если вы ввели команду поиска (/ или ?), то `` вернет курсор туда, откуда вы начали операцию поиска. Два апострофа ('') работают так же, как две обратные кавычки, за исключением того, что они возвращают курсор в начало строки, а не точно туда, где он находился.
Общее количество строк, отображаемых с помощью сочетания клавиш Ctrl+G, может дать вам приблизительное представление о том, сколько строк нужно переместить. Если вы находитесь на десятой строке 1000-строчного файла:
"practice" 1000 lines --1%-- 10,1 1%
и знаете, что хотите начать редактирование ближе к концу этого файла, вы можете приблизительно указать пункт назначения с помощью команды 800G.
Перемещение по номерам строк — это инструмент, который поможет быстро перемещаться по большому файлу.
Перечень команд перемещения в vi
В табл. 3.1 приведены все команды, описанные в этой главе.
Арнольд работал с системами Unix с 1980 года, когда его познакомили с PDP-11 на шестой версии Unix. Он имеет опыт работы с различными коммерческими Unix-системами от Sun, IBM, HP и DEC. Он также использует GNU/Linux с 1996 года.
С 1987-го Арнольд активно использует awk и принимал участие в работе над gawk, версией awk проекта GNU. Будучи членом группы по голосованию POSIX 1003.2, он помог сформировать стандарт POSIX для awk. На протяжении долгого времени осуществляет поддержку gawk и его документации.
Также работал системным администратором и преподавал курсы непрерывного образования по Unix и построению сетей. Однако у него были и неудачные попытки работы с небольшими компаниями по разработке ПО, о которых он предпочитает не вспоминать.
Некоторое время Арнольд работал в ведущей израильской компании, где занимался написанием высококлассного ПО для управления и контроля. Затем он устроился инженером-программистом в Intel, а позднее в McAfee. В настоящее время занят в менее крупной компании, которая занимается мониторингом сетевой безопасности для промышленности и в сфере управления зданиями. Его личный веб-сайт — www.skeeve.com.
Издательство O’Reilly не дает Арнольду отдохнуть: он является автором или соавтором бестселлеров «UNIX. Справочник», Effective awk Programming (четвертое издание), sed & awk (второе издание) с Дейлом Догерти, Classic Shell Scripting с Нельсоном Х. Ф. Бибом и некоторых карманных справочников.
Элберт Ханна начал свою карьеру как профессиональный музыкант, но после судьбоносной аварии на велосипеде, в результате которой он повредил руку и потерял возможность играть на виолончели, решил сменить направление и выбрал информационные технологии. С этой наукой он познакомился во время реабилитации. Хотя музыка остается его любимым хобби, профессиональная деятельность Элберта сосредоточена в области компьютерных технологий.
Он получает особенное удовольствие, осознавая, что пишет эту книгу о Vim, используя Vim, так как в той или иной степени редактор vi внес свой вклад в выбор его профессионального пути.
Элберт познакомился с Unix во время работы в телекоммуникационной отрасли, где использовали дистанционный ввод заданий (RJE), связанный с мейнфреймом IBM. Он обнаружил, что многие процессы протекали проще, когда они перенаправлялись на компьютер компании AT&T, который работал на системе V Unix с использованием множества «специализированных» команд для преобразований и отчетов, а затем вновь возвращались обратно на мейнфрейм.
В работе с Unix Элберту требовалось глубокое понимание ed, что стало отправной точкой для его долгого пути изучения, обожания и евангелизации vi и в конечном итоге Vim. Седьмое и восьмое издания книги дают возможность Элберту выразить свою признательность и уважение к влиянию Vim на вселенную программирования.
Элберт специализировался на интеграции разрозненных систем. Многие пользователи используют его приложения, не осознавая, что внутри объединено несколько отдельных приложений. Если копнуть достаточно глубоко, можно найти его фотографию на обложке CEO Magazine (примерно в середине 90-х годов), где он был отмечен за свою работу по интеграции телекоммуникационных услуг и распределительных приложений.
Он разработал внешний веб-инструмент, предоставляющий быстрые, простые и эффективные способы поиска информации от стороннего продукта. Данный инструмент быстро зарекомендовал себя как популярный метод устранения неполадок для групп поддержки и сотрудников отдела разработки. Элберт также провел презентацию в Лас-Вегасе в 2018-м, продемонстрировав веб-инструмент.
Элберт внес свой вклад в написание более одной сотни технических публикаций (под псевдонимом) и был упомянут в двухчастной статье The Great FOSS Debates: Kernel Truths и FOSS Debates, Part 2: Standard Deviations вместе с Линусом Торвальдсом.
Более подробно с книгой можно ознакомиться на сайте издательства:
» Оглавление
» Отрывок
По факту оплаты бумажной версии книги на e-mail высылается электронная книга.
Для Хаброжителей скидка 25% по купону — Редакторы
Комментарии (27)
forthuse
24.08.2023 14:41Подскажите, а насколькр отлично содержимое книги 8-го издания от 7-ой версии вышедшей в 2013г.?
P.S. Недавно встретился пост о редакторе AkelPad под Windows, но с возможностью и запуска его через Wine под Linux и стало интересно, а насколько и кем такая функциональность реализованная в редакторе действительно используется и востребована.
Из недавнего, к примеру, в рамках использования Geany под Linux приглянулась возможность использования MarkDown разметки файлов при их отображении в редактировании реализованна в виде плагина к редактору.
Думаю, что расширения, в целом, программы не заменят, к примеру, более специализированные решения как WinMerge в своей функциональности.
CrazyOpossum
24.08.2023 14:41+4Уже восьмое издание, а всё ещё не поняли зачем нужен Vim. Вим (в качестве ide, а не редактора конфигов) - это не про yy и dd, а про расширяемость. И самое важное в нём - это экосистема и как совмещать плагины. Этот учебник рассказывает про отличия packer, dein и vundle? А как настроить language server для своего языка? Какие компоненты должны быть у уважающего себя редактора - линтер, форматтер, автодополнения, навигация по репозиторию?
saidelman
24.08.2023 14:41Позволю себе не согласиться. Вот уже классический ответ на stackoverflow: https://stackoverflow.com/questions/1218390/what-is-your-most-productive-shortcut-with-vim/1220118#1220118
Плагинами можно обвешиваться и в саблайме, и в вскоде, и в емаксе. Вим отличается от них всех не линтерами и форматтерами (но полу-автодополнение в нём из коробки великолепное).
CrazyOpossum
24.08.2023 14:41+3emacs - это тёмная сторона vim'а, с ним всё хорошо. Мне нравится, что саблайм тоже спроектирован с упором на модули, но они просто хуже и всё тут. Когда они станут лучше, всё ещё останутся проблемы с эргономикой самого редактора. Про вскод не знаю.
Что касается ответа - разрешаю не согласится, но автор рассказывает как он может быстро и ловко редактировать текст. Я же хочу редактировать код, поэтому я не буду пользоваться заменами типа%s old_name/new_name/g
, который меняет строки текста в файле. Я возьму плагин, который заменит мне все символы (имена функции) в проекте целиком, не трогая, например, текст в комментариях или ещё что.saidelman
24.08.2023 14:41+1А зря сразу отказываетесь от
%s///
, в комментариях бывают примеры употребления функции :) Так что возможно, что их тоже надо менять.Я не пробовал емакс, так что не могу ничего про него сказать. Саблайм был классным, пока я не разобрался как пользоваться вимом. И в нём я регулярно пользуюсь вещами типа "удалить весь параграф (всё между двумя пустыми строками", "удалить отсюда и до кавычки", макросами. А потом можно добавить несложных плагинов и быстро менять вид скобочек, научиться работать с ответом "тест с текущим уровнем отступа". Конечно же, lsp это круто, линтеры, форматтеры и вся эта красота. Но они есть под любой достаточно популярный редактор, и их работа больше зависит от имплементации конкретных сервера, линтера и форматтерами, чем от редактора. Возможно, что я не прав в этом, но по моему опыту всё это работало примерно одинаково (ну разве что хоткеи разные) в вскоде, саблайме и виме.
Upd. Забыл ещё одну мысль. Работать с кодом как с кодом несомненно удобно. Но иногда есть смысл вспоминать, что код — это просто текст, и некоторые текстовые операции к нему вполне можно применять. И лично мне в такие моменты немедленно становится тяжело в других редакторах: они удобны для кода (хотя и это не всегда), но не для текста.
CrazyOpossum
24.08.2023 14:41+1Да я ж не спорю, что командный режим у вима отличный. Просто лично я выбираю вим за эргономику и отсутствие необходимости в мышке.
NeoCode
24.08.2023 14:41+2Объясните, зачем нужна эта археоэкзотика вообще? Есть современные текстовые редакторы, тот же Notepad++ и множество других. Есть полноценные IDE для работы с исходниками на любых языках программирования. А в каких случаях еще требуются текстовые файлы? Конфиги, логи, и пожалуй всё. И в общем случае эти файлы не должны быть большие.
Vi и Vim, как я понимаю, это продукты древних систем с древними клавиатурами и полным отсутствием мышей и современного GUI (иначе как объяснить использование алфавитных клавиш для выполнения команд?).
Sevada101
24.08.2023 14:41+1Современные текстовые редакторы имеют GUI-основу, с достаточно ограниченным использованием клавиатуры; а "эта археоэкзотика" полностью стоит на ней [клавиатуре], что позволяет достаточно быстро и эффективно выполнять целевые задачи (собственно, редактирование текста). И это я еще не говорю про необьятные возможности конфигурации и адаптирования Vi(m) под себя.
Vi и Vim, как я понимаю, это продукты древних систем с древними клавиатурами и полным отсутствием мышей и современного GUI (иначе как объяснить использование алфавитных клавиш для выполнения команд?).
Интересно, какие это древние клавиатуры? И современное GUI только убило бы саму концепцию vi, которая показывает значительное превосходство перед графическим интерфейсом.
forthuse
24.08.2023 14:41+1У Вас столько "специфичных" задач плохо решаемых другим инструментарием для того, чтобы как, к примеру, использование Far оставаться в рамках использования этих редакторов, или Ваши задачи немного больше, чем общепринято понимать как задачи для редактирования текстов?
P.S. Или это просто "продиктовано" Вашими сложившимся привычками?
Сам использую сочетания клавш Ctrl+C, Ctrl+V и пожалуй почти на этом всё и останавливается в повседневном взаимодействии с клавиатурой.
(часть своих действийи и в Far делаю с помощью мышки и не ощущаю дискомфорта от этого)
NeoCode
24.08.2023 14:41что позволяет достаточно быстро и эффективно выполнять целевые задачи (собственно, редактирование текста).
А куда торопиться? Вы секунды экономите при работе? ИМХО скорость набора актуальна только при вводе текста под диктовку, но никак не при решении интеллектуальных задач, таких как программирование.
EvilsInterrupt
24.08.2023 14:41+1Я начал программировать в далеком детстве на пленочном БК0010 на языке Фокал. Потом после него появились Компаньон-2, Дельта. Все это отечественные "приставки" к телевизору. Моя душа полюбила все эти "шестеренки" программного мира. Когда начал на своем первом Intel-совместимом компе начал использовать мою первую IDE под названием Visual C++ 6.0 счастью не было предела )) Потом понеслась: Delphi 7, Eclipse, Turbo Delphi, Netbeanse, Visual Studio 2008/2010/2013. Много что использовал и последним моим IDE был VsCode.
Казалось бы все могут! Мощные комбайны. Однако когда хочется контроля, т.е. ставилось только то что я сказал, а не то что вместо меня решил Microsoft или кто-то еще, то тут с этим проблемы. Занимает лишнее место и далеко не 1-2 МБ. Очень часто пожирает лишнюю память. Большая часть современных IDE устанавливает без ведома пользователя много того, что он не запрашивал "на всякий случай". Вот только этот "всякий случай" все почему-то не наступает!
Недавно начал использовать VIM после больше 15 лет использования различных IDE и поражаюсь своей глупости "Почему зная о таком инструменте я не нашел время взять и попробовать? Отказаться от использования же не трудно!".
На кого и кому нужен VIM ? Прежде всего тем людям, которые очень много работают с текстом. Программисты в это множество попадают.
При работе с текстом у нас возникает:
Огромное кол-во повторяемых действий. Это и рефакторинг, это и найти последовательность символов. Это и найти, потом вставить, потом вернуться назад и повторить с нескольким строками. Это и удалить 7 строк подряд. Это и переместить 3 строки на 5 по выше! И много чего !!!
Также, очень часто программист смотрит на код! Да! Когда говорят про рефакторинг это не от хорошей жизни! А от того что мы, программисты, больше смотрим на код, чем пишем новый! Когда мы смотрим на код мы перемещаемся по нему. Вопрос: а зачем тогда давать программисту при просмотре возможность "напечатать случайно"? Чтобы что? Чтоб дать ему случайно внести багу? Именно от этого спасает "командный режим". Захочешь что сделать нажмешь нужные кнопки
Любой программист стремится меньше уставать, т.к. программирование это деятельность больше чем на 5 минут! Он экономит на всем! Пишет скрипты помогающие ему. Он учит горячие клавиши. Он ставит нужные инструменты. Он учится новым подходом. И одним из таких навыков для повышения своей эффективности это: навык слепой печати. Развивая этот навык он побочным эффектом получает: повышение скорости набора текста. Но самым главным эффектом от этого навыка руки меньше устают! В результате развития навыка программист быстрее пишет код и пробует свои идеи. Иногда действительно, лучше взять и сделать, увидеть результат и решить подходит или нет, чем долго думать и не факт что придумаешь адекватное ситуации решение. Но вот не задача, в случае IDE приходится перемещаться на стрелки или того хуже на мышку. Со временем уже привыкая к VIM ты понимаешь, что тебе не только на стрелки сложно перенести руку, но и на кнопку ESC !!! И ты вставляешь "inoremap jk <esc>" в свой конфиг, что позволяет оставаться ТОЛЬКО над клавиатурой!
Программиста делают программистом не только задачи, которые он решает. Не только ошибки, которые он порою по несколько дней отлаживает. Но и его инструменты! VIM как раз из тех, кто вынуждает во многом посмотреть на свой привычный процесс немного иначе. Под другим углом зрения. Он создан программистами для программистов!
Вопрос на тему: "Зачем надо использовать VIM, когда есть современные IDE?" звучит также как "Зачем использовать сортировку Хоара, когда есть пузырьковая сортировка? Сортирует же, че мучиться то?"
Раньше молодым ребятам изучающим программирование я всегда советовал такое:
Учи английский
Развивай навык слепой печати
Развивай алгоритмическое мышление(сортировки, деревья, графы)
Изучай Linux или FreeBSD и используй в качестве основной ОС
Занимайся спортом
Общайся с противоположным полом(не будь задротом)
Развивай коммуникацию(ходи на конференции, знакомься с новыми людьми, пили с другими open Source проекты)
Но сейчас между 2 и 3 советую еще "Научись использовать VIM". Всего вам доброго!
CrazyOpossum
24.08.2023 14:41+1Эргономика - вим не требует тянуться к ctrl и стрелкам. И мышка тоже не нужна.
Всё в одном - у меня это среды под питон, хаскелл, луа, прозрачная работа с pgp шифрованными файлами.
Переносимость - я последнее время часто меняю машины. Конфиги вима - 3 файла (можно и одним обойтись)
Notepad++ просто плохо написан и это не ide.
Sublime - та же философия вим, только хуже экосистема. А так из коробки толком ничего нет, кроме приятной темы.
Разные реальные ide - ок, но обычно хорошо работают только с одним языком и неповоротливые.NeoCode
24.08.2023 14:41+1Vim использует одни и те же клавиши для управления и (очевидно) для ввода текста. Значит, между этими режимами нужно как минимум переключаться. Я вот пока набирал это сообщение, много раз попадал не туда пальцем, пользовался стрелками, удалял и вводил заново. Это же сколько раз нужно было бы переключаться туда-сюда... а если учесть что я и в командном режиме мог много раз опечатываться, то в итоге я вообще бы ничего не ввел. Стрелки прекрасны тем что они стоят отдельно, по ним очень сложно промазать, в отличие от буквенных клавиш.
У меня вообще иногда бывает, что быстро ввожу в браузере какой-то текст, а затем случайно нажимаю ЧТО_ТО (какой-то неведомый хоткей) и страница обновляется, текст пропадает (а его может быть много). Поэтому я вообще не люблю слишком много хоткеев. Мне Ctrl-C и Ctrl-V и достаточно.
CrazyOpossum
24.08.2023 14:41+1Мобилки - это мобилки тут всё всегда плохо.
Вопрос привычки - я на виме почти 10 лет и не пользуюсь большей частью хоткеев вообще. Мне важнее думать о плагинах чем о разных способах редактирования текста. И u u u обычно достаточно чтобы исправить случайно содеянное, а древовидная история редактирования текста (mundo) решает все проблемы со случайными изменениями.
На тему 10 лет - сколько редакторов сменили лично вы за это время, например? С notepad на notepad++, дальше sublime, потом pycharm - частый путь питониста и каждый раз осваивать заново новый редактор. Я за это время только сменил vim на neovim с идентичным функционалом.NeoCode
24.08.2023 14:41У меня не мобилка а обычный комп с обычной клавиатурой.
А редакторы - собственно notepad'ом практически и не пользовался. Первая среда разработки - досовский Borland C++, затем виндовые Builder, Visual Studio всех версий, Qt Creator, Goland и многие другие IDE. Текстовые редакторы - UltraEdit, EmEditor, Notepad++ (Sublime не понравился, при первом знакомстве почему-то показалось что там нестандартный интерфейс, а я офигенно люблю все стандартное). Никаких проблем с ними нет, как редакторы они все совершенно стандартные и предсказуемые. Для работы с "человекоориентированным" текстом (не кодом, не конфигами...) - аутлайнеры (PIM), Тоже были разные - TreePad, Evernote, ZIM, в итоге перешел на свою программу с WYSIWYG редактором и прочим функционалом таким как я хочу. Ну и документы в MS Word, куда уж без него.
В результате совершенно не представляю зачем нужны vi/vim/emacs, какие задачи они решают и какие задачи решают на них люди. Но реально интересно. Это же целые сообщества людей, которые осознанно выбирают эти инструменты, развивают их... Не может же все сводиться к банальной ностальгии по каким-то старым-добрым временам, когда люди начинали именно с этих программ. Да и множество людей выбрали их уже во времена полноценных GUI, офисного софта и современных IDE.
CrazyOpossum
24.08.2023 14:41В результате совершенно не представляю зачем нужны vi/vim/emacs
в итоге перешел на свою программу с WYSIWYG редактором и прочим функционалом таким как я хочу
Вот примерно за этим - сделать как удобнее самому, только не нужно совсем уж строить с нуля. Я тоже перебрал разные редакторы на пути к виму и под виндой по мелочи в саблайме сижу (ну чисто одностраничники в питоне набросать), но пока не вижу замены виму как основной ide. У остальных редакторов есть фатальные недостатки (как минимум необходимость мыши), а у вима ничего, что нельзя было бы исправить плагинами.
farrow
24.08.2023 14:41Для меня основной причиной стало удобство. Хотя когда смотрел на vim первый раз, слово "удобный" — последнее, что приходило в голову.
Менее недели периодических посиделок в vim и мысли "зачем я тут страдаю" сменились на "как же приятно работать". Начинал с короткого vimtutor, затем посмотрел популярные плагины под язык, взял за основу чей-то конфиг, подобрал симпатичную тему и уже несколько лет пользуюсь.
Локально он у меня не заменил IDE, но хорошо дополнил. Удаленно на машинах стал главным редактором, там в nano и mcedit вообще не хочется возвращаться.
mpa4b
24.08.2023 14:41+17ое издание официально лежит на гитхабе в пдфке: https://github.com/jitopsec/jitopsec-first-project/tree/master/PDF
DikSoft
24.08.2023 14:41Было бы очень интересно посмотреть на реальное исследование роста производительности от использования этих ... необычных для нормальной пользовательской логики инструментов.
Потому как есть сомнение, что воспевание их, как волшебных пилюль, вероятно, не совсем корректно измерено. Эффективность, возможно, растёт не из-за того, что они такие вот прямо реактивные, а потому, что
сойти с умарешиться их испоьзовать могут только самые упорные и продвинутые кодеры. Интересно было бы вычислить/замерить, с какой производительностью они же смогли бы работать на классических IDE.
Plokhikh
А где купон взять?
quarus
Набрать предложенный текст при покупке.
igorzakhar
При оформлении заказа ввести в специальное поле код купона Редакторы
Plokhikh
Понял ))