Vim спустя 15 лет

Содержание:

Режимы работы

Нормальный режим

Конечно же, подобных команд существует гораздо больше. Дело в том, что вам нужно изучить эти команды, чтобы использовать. Вы можете возразить, что, вероятно, не сможете выучить все эти команды, ведь существуют сотни различных команд перемещения, среди которых есть и простые, и достаточно хитроумные, и что уйдут недели тренировок на изучение всех этих команд. Что ж, вам и не нужно изучать их все. Вместо этого нужно разобраться в своём индивидуальном стиле редактирования и изучить только те команды, которые помогут сделать его более эффективным.

Bram Moolenaar

По умолчанию Vim начинает свою работу в нормальном режиме, который также называют командным. Нажатие клавиш в этом режиме воспринимается как команды (копирования, удаления, перемещения текста и т. д.).

Среди команд нормального режима есть «односимвольные» команды. Так, например, нажатие $ приведёт к перемещению курсора в конец строки; нажатие клавиши (ноль) — в начало; D (в верхнем регистре) — к удалению (delete) части текущей строки от текущего положения курсора до конца; С (в верхнем регистре) — к замене (change) части текущей строки от текущего положения курсора и до конца и т. д.

Другие команды для своей работы будут ждать дальнейшего продолжения ввода. Например f ответственно за быстрое перемещение в строке к следующему набранному после себя символу. Поэтому после нажатия f Vim будет ждать набора этого символа, чтобы использовать его в качестве искомого.

После нажатия y (yank), d, c и других подобных «управляющих» клавиш Vim будет ожидать дальнейшего ввода команд, задающих объект, над которым будет произведено действие (копирование, удаление или замена соответственно). Так, daw удалит текущее слово под курсором (delete ambient word), а d$ — все символы начиная с текущего положения курсора и заканчивая концом строки.

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

Нормальный режим — это центральный режим, из которого осуществляется переход во все остальные.
Из любого режима в командный режим можно перейти, дважды нажав клавишу Esc (в большинстве случаев достаточно одного нажатия).

Режим вставки

Режим вставки (англ. insert mode), в котором производится ввод текста.

Для перехода из командного режима в режим вставки можно нажать i (для начала вставки текста на месте курсора) или a (для начала вставки текста после курсора). Также существует ряд других клавиш и их сочетаний для перехода в режим непосредственного редактирования текста (например, через одну из команд замены текстового объекта).

В этом режиме Vim работает так же, как и большинство «обычных» текстовых редакторов. По умолчанию набранные символы не воспринимаются как команды, а вставляются в существующий текст. Однако даже в этом режиме можно задать особые действия редактора, выполняемые при нажатии определённых клавиш или их сочетаний. Как пример, можно задать, чтобы при наборе открывающейся скобки ( сразу же добавлялась парная ей закрывающая скобка и курсор устанавливался между ними.

Для вставки, удаления, изменения и автодополнения текста также могут использоваться клавиатурные сочетания (Ctrl+R и др.)

При наборе слова-аббревиатуры это слово автоматически заменяется на заранее заданный текст.

Режим командной строки

Этот режим вызывается нажатием из нормального режима. За двоеточием следует сложная команда (например, поиска или замены), которая после ввода передаётся на исполнение нажатием ↵ Enter. После выполнения команды редактор возвращается в нормальный режим.
К этому режиму также относятся команды поиска дальше по тексту , поиск назад по тексту () и команда-фильтр для передачи данных внешнему фильтру.

Визуальный режим

Изменение блока текста в визуальном режиме

Визуальный режим отсутствовал в Vi и впервые появился в Vim.
Он чем-то схож с командным. С помощью специальных управляющих команд, в сочетании со стрелками и командами навигации, можно посимвольно, построчно или в виде блока выделять фрагменты текста и затем применить к ним команды нормального режима (например, удаление выделенного текста или его замена). Редактирование в этом режиме проще, чем в нормальном, потому что чётко видно, к какому блоку текста будет применяться вызванная команда редактирования.

Специфичные руководства

Когда вы освоите Vim и попользуетесь
им некоторое время, вы можете обнаружить
функционал, о котором и не подозревали.
Следующие руководства расскажут вам,
как использовать некоторые специфические
функции

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

  • Vim’s absolute, relative and hybrid line numbers. Из этой статьи вы узнаете, как изменять схему нумерации строк. Польза этой функции сильно зависит от того, с каким языком вы работаете.
  • Статья A simpler Vim statusline поясняет, как можно кастомизировать строку состояния внизу экрана без использования плагинов (таких, как vim-powerline или vim-airline).
  • Есть очень крутой проект vim-clutch. Его суть — в возможности сделать ножную педаль для переключения между командным режимом и режимом вставки (вместо использования клавиши ESC).
  • И вот еще одна любопытная статья о том, как ее автор вел записи на лекциях по математике, используя LaTeX и Vim.

Проходите тест по Python и поймите, готовы ли вы идти на курсы

Comments[edit | edit source]

 TO DO 

  • What else is needed to explain what vimrc is, and how to use it, for a beginner?
  • Do something with the following text from the original tip (if keep it, need to fix text because it assumes you have used some standard setup for installation, and assumes $VIM and $HOME are some default, and of course is for Windows):

On Windows, when you start Vim normally, it *either* runs the file «C:\Documents and Settings\(user name)\_vimrc» (where «(user name)» is replaced by the actual user name); *or*, if that file doesn’t exist (it usually doesn’t, for most users), it runs the file «C:\Program Files\vim\_vimrc». Note that if you have more than one disk your home may be different; do an «:echo $HOME» to know where is your home. You should also see the _viminfo file in that directory.

  • Include information for Windows:
    • When is not defined, it is created by combining and (if defined).
    • The recommended method to define and is to set the «Home folder … Local path» on the Profile tab of the User properties in Local Users and Groups (run lusrmgr.msc).
    • I’d say that this (the item above) is the recommended method to set your home folder in Windows. The recommendes method to specify where your is located (if it differs from your home folder) is to set the environment variable. (Spiiph 00:16, 29 July 2009 (UTC))

Link to the #vim-approved .vimrc? 😉 (Spiiph 00:18, 29 July 2009 (UTC))

Proposal Omit suggestions like the following that attempt to auto-source vimrc. I suspect that anyone needing to read a tip to do this could get themselves in quite a bit of trouble. IMHO it’s a lot more sensible to map a key to source a script so you can control when it is sourced. I haven’t bothered to put such a mapping in the tip so far because the info seems more helpful, and entirely adequate. —JohnBeckett 11:56, 23 August 2008 (UTC)

To source changes immediately, add to vimrc:

au BufLeave ~/.vimrc :source ~/.vimrc
Why not use a BufWritePost instead of BufLeave, so it will source whenever you save?

Getting started tip …
I hit this page because I could not remember the «mkvim» command. I found it elsewhere and thought I’d throw it in here. If you open vim, change some settings and get things how you like you can use this command

:mkv 

to automatically make a vimrc file based on your current settings. The part is optional; vim will use ~/.vimrc by default. If you already have a .vimrc and you attempt this you we will be warned that .vimrc already exists. You can use

mkv!

to overwrite the existing file if you like. However once you do this your original .vimrc file is gone so you may want to back up any existing .vimrc before you try this.

Using to create isn’t a terribly good idea, since it saves mappings and abbreviations setup by plugins. It can be useful to copy currently set options to however. (Spiiph 14:51, 27 July 2009 (UTC))

Копирование участка текста изодного файла в другой (Визуальный Метод)

Есть несоклько способов копировать текст из одного файла вдругой. В этом разделе мы используем более новый, визуальный режим. Впредыдущем разделе описан старый .

Чтобы скопировать участок текста изодного файла в другой, введите следующие команды:

Команды

Разъяснение

1.

Откройте для редактирования файл, содержащий текст для копирования.

2.

Перейдите к верхней строке копируемого участка.

3.

v

Войти в визуальный режим. Если вы хотите копировать текст целыми строками, используйте V для включения Визуального Строчного Режима

4.

Перейдите на верхнюю стоку копируемого текста. Текст будет подсвечен.

5.

y

Копировать (y) текст.

6.

:split второй-файл

Открыть другое окно, содержащее второй файл. (Файл, в который должен быть скопирован текст.)

7.

Переместите курсор на строку куда должен быть скопирован текст. Текст будет размещен на следующей строке.

8.

p

Вставить текст после курсора.

Поиск процедуры в программе на Си

Vim был разработан программистами для программистов. Вы можетеиспользовать его для нахождения процедуры внутри набора программныхфайлов на C или C++.

Но сначала вым нужно сгенерировать таблицу файлов , называемый»tags» файлом. (Этот файл по грубому называется tags.)Команда ctags генерирует эти файловые таблицы.

Для генерации таблицы содержания всех программных файлов на C втекущей рабочей директории используйте следующие команды:

        $ ctags *.c

Для C++ используйте команду:

        $ ctags *.cpp

Если вы используете отличное от .cpp расширение для ваших C++файлов, используйте его вместо .cpp.

Сгенерировав этот файл, укажите Vim что хотите редактироватьпроцедуру и он определить местоположение этой процедуры и переместитвас к ее содержимому. К примеру если вы хотите редактироватьпроцедуру write_file, используйте команду:

        $ vim -t write_file

Предположим вы просматриваете процедуру write_file котораявызывает процедуру setup_data и вы хотите ее просмотреть. Чтобыперейти к этой функции, поместите курсор в начале выраженияsetup_data и нажмите Ctrl+]. Это укажет Vim перейти к объявлению этойпроцедуры. Это перемещение произойдет даже если Vim для этогопонадобится перейти на другой файл.

Opening vimrc[edit | edit source]

If Vim finds your vimrc file during startup, Vim will set the environment variable to the full path of the vimrc file. Similarly, if your gvimrc file is found, the variable is set. Therefore, you can easily edit these files from within Vim:

:e $MYVIMRC
:e $MYGVIMRC

Using file name completion, you could type then press Tab until you see the desired variable. If you only want to see the path, type then press Tab to see the variable, and press Enter.

In gvim, the Edit menu includes «Startup Settings» which will use to edit your vimrc file. If does not exist, «Startup Settings» will create a new file using the «user vimrc file» path shown by the command.

Sourcing vimrcedit | edit source

After you have saved changes to your vimrc file, you can see the results by exiting from Vim, then starting Vim again.

If you are making frequent changes, you might want to «source» (execute) the changed vimrc file without exiting:

:so $MYVIMRC
" Alternative that can be used if vimrc is the current file:
:so %

Warning You may need to plan your vimrc so re-sourcing does not cause problems. If you define commands, functions, or autocmds, you must make them remove or override the previous version when sourced, or you will get errors (for commands and functions) or duplicates (for autocmds). Here are some examples that will work correctly when re-sourced:

" Use bang (!) to redefine a command or function, if already defined.
command! Mycommand echo "Hello!"
function! Myfunc()
  echo "Hello!"
endfunction

" Put all autocmds in some augroup and use au! to clear the group.
augroup vimrc_autocmds
  au!
  autocmd BufRead * echo "File read!"
augroup END

Recovering from errorsedit | edit source

Some errors in your vimrc may prevent Vim from starting successfully. A reliable way to handle that would be to rename your vimrc file, then edit the renamed file, then give it the correct name. Alternatively, you could start Vim with a command like this (or use «gvim» if that is how you run Vim):

vim -N -u NONE -U NONE

The starts in «not compatible» mode (that is, with extra Vim features). The argument (must be uppercase) skips initializations and does not read any vimrc file (), and does not read any gvimrc file ().

You could now use the command to show the vimrc path, then enter a command to edit that file.

Чем хорош Vim в плане разработки на Python?

Согласно философии Vim, разработчики
куда более продуктивны, если им не
приходится отрывать руки от клавиатуры.
Код должен естественным образом
перетекать из их мыслей на экран через
пальцы и клавиши. Использование мыши и
прочих устройств замедляет преобразование
мыслей в код.

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

Стенд

Для начала поднимем стенд с уязвимыми версиями Vim и Neovim. Будем использовать контейнер Docker с Debian.

Устанавливаем все необходимые зависимости.

Такая портянка нужна, потому что мы будем компилировать дистрибутивы редакторов из исходников. Скачиваем уязвимые версии: для Vim это все, что ниже версии 8.1.1365, а для Neovim — не выше 0.3.5.

Компилим и устанавливаем Vim. Включаем флаги для добавления отладочной информации.

То же самое проделываем и для Neovim.

Теперь нам нужно создать конфигурационные файлы, в которых надо активировать modeline. Для Vim это в домашней директории, а для Neovim — .

Стенд готов. Можешь запустить редакторы и проверить их работоспособность.

Готовый стенд с уязвимыми версиями Vim и Neovim

INFO

Чтобы выйти из Vim без сохранения результатов редактирования файла, нужно перейти в нормальный режим с помощью и ввести . Ура, ты спасен!

Детали уязвимости

Для начала давай разберемся, что такое . В Vim существует четыре основных режима работы: обычный режим, режим вставки, командный режим и визуальный режим.

Отображение режима работы редактора Vim

Для перехода в обычный режим нужно нажать , а с помощью можно войти в командный. В нем ты можешь выполнять команды, встроенные в Vim или предоставляемые плагинами. Это могут быть самые разные действия: настройка среды и рабочих файлов, функции, связанные с обработкой текста, команды оболочки и тому подобное.

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

Это все, конечно, удобно, но что, если нужно переопределить какие-то настройки для конкретного типа файлов или вообще в пределах одного документа? Тут на помощь и приходит . Этот режим позволяет определить в открываемом файле опции его редактирования. Настройки задаются напрямую в файле, по дефолту интерпретируется первая и последняя строка. Если они соответствуют шаблону, то Vim выполняет их.

В некоторых современных дистрибутивах Linux этот режим включен по умолчанию. Если версия твоего редактора в зоне риска, то набери команду . Увидишь в ответ — считай, что ты в безопасности и уязвимость на тебя не распространяется.

Существует два формата указания опций в modeline. Первый — короткий.

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

Второй формат — расширенный.

В этом формате те же самые опции будут выглядеть следующим образом:

Разумеется, в целях безопасности в modeline можно использовать не все настройки.

Не все опции доступны для изменения через modeline

Например, попробуем поменять кодировку, в которой работает редактор. За это отвечает опция .

Опция enc недоступна для изменения через modeline

/src/option.c

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

Все выражения выполняются в режиме песочницы ().

Выражения из modeline выполняются в песочнице

В ней допускается применение только простейших «безопасных операций».

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

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score!
Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя!
Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.

Я уже участник «Xakep.ru»

Цифровой словарь от А до Я

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

Давайте своими силами создадим электронный словарь для программ StarDict / GoldenDict. Для этого может понадобится много, или мало человеко-часов, в зависимости от качества исходного материала.

Минимум один трюк Vim, про который вы не знали

  • Перевод
  • Tutorial

Я уже восемь лет работаю в Vim и постоянно открываю что-то новое. Принято считать это достоинством Vim. Как по мне, так это недостаток открытости: куча скрытых функций спрятаны слишком глубоко.
Вот говорят о красоте модального редактирования и текстовых объектах, но мне кажется, что суть Vim не в этом. Vim — это лоскутное одеяло из подсистем, под завязку забитых дополнительными инструментами. Только в обычном режиме редактирования более сотни комбинаций клавиш! Такая плотность инструментария в значительной степени объясняет, почему Vim настолько полезен. Если «показать все теги для ключевого слова» — это просто , то этой командой будут пользоваться гораздо чаще.
В системах с недостатком открытости приходится полагаться на руководства. Но для Vim их не так уж много. Есть статьи для новичков, такие как (не путать с CIA, мануалом ЦРУ по Vim) и тому подобное. И есть статьи экспертов, которые погружаются в подсистемы. Но никто на самом деле не говорит об этих особых трюках, которые заставляют воскликнуть: чёрт побери, как мне это было нужно в течение последних шести лет!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *