Файл viminfo что это
Как удалить определенные критерии из моего файла .viminfo?
Я хочу очистить историю командной строки, метки файлов, список переходов и т. д.
Однако я хочу сохранить историю строки поиска.
Есть какой-либо способ сделать это?
Я не думаю, что это не по теме. Редактор vim - это «программный инструмент, обычно используемый программистами» (и, следовательно, входит в область применения). Это, конечно, не обычный текстовый редактор, предназначенный для использования обычными пользователями.
Я согласен с CJ, это относится к инструменту, который активно используется программистами и как таковой заслуживает того, чтобы жить здесь.
[Проблема была обработана] - Ali Cloud Server Vishies Mining Virus Aliyun.one
Феномен Small Partner Server - это высокий процессор. Но от топ-и т. Д., Есть проблема.
Просмотр Crontab находит троянов через redis Implant (без пароля)
Хозяин Crontab и т. Д., Все модифицированы. Попробуйте изменить задачу Crontab, она еще не перезаписывается. Не удается опустошить crontab. Есть этот скрипт в этом скрипте везде, это должен быть сценарий синхронизации сценариев обновления.
Даже если вам повезет, вы будете покрыты новым.
Вирус троян следующий
Просто пост, у кого-то еще есть вид. Внутренний пост, кажется, почти нет
Исполнительный в бройлере crontab Таким образом, если есть доверенный хост, и если есть ключ, хост превратится в бройлер.
Хотя он выглядит так, как только проверил скрипт, но когда он готов начать атаку, природу после модифицирована сценария.
Форум свежих постов
Поиск скрытого файла ~ / .viminfo, чувствую себя как источник, но если вы хотите очистить одноразовое удаление, это слишком сложно.
'0 222 0 ~/.viminfo
'1 1 0 /usr/local/sbin/d118cec4f2e457
'2 20 48 /etc/crontab
'3 4 0 /etc/crontab
'5 1 0 /etc/cron.d/root
'6 1 0 /etc/cron.d/www-data
'7 1 0 /etc/cron.d/user
'8 2 0 /etc/cron.d/sysstat
'9 1 0 /etc/cron.d/redis
-' 1 0 /usr/local/sbin/d118cec4f2e457
-' 20 48 /etc/crontab
-' 1 0 /etc/cron.d/root
-' 1 0 /etc/cron.d/www-data
-' 1 0 /etc/cron.d/user
-' 2 0 /etc/cron.d/sysstat
-' 1 0 /etc/cron.d/sysstat
-' 1 0 /etc/cron.d/redis
-' 1 0 /etc/cron.d/nobody
-' 1 0 /etc/cron.d/nginx
-' 1 0 /etc/cron.d/admin
-' 5 0 /etc/cron.d/0hourly
-' 1 0 /etc/cron.d/0hourly
-' 1 0 /etc/cron.deny
-' 1 0 /etc/cron.daily/man-db.cron
-' 1 0 /etc/cron.daily/logrotate
-' 1 0 /var/spool/cron/crontabs/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /etc/cron.daily/logrotate
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /etc/cron.daily/man-db.cron
-' 1 0 /etc/cron.daily/logrotate
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
-' 1 0 /var/spool/cron/root
Найти нашла этот тип сценария везде. Эти файлы еще нет.
Поскольку это отравление корневой учетной записи, его нельзя удалить, а машина не может быть лопатой. (Небольшой партнер удалил Wget и Curl, кажется, решают проблему высокой нагрузки CPU)
То, как я думаю, о теперь они могут бросить только Crontab STOP. Затем запрещайте загрузку загрузки. Или напрямую удалите файл Crontab. Файл хоста изменяет адрес Aliyun.one, чтобы избежать обновления скрипта. Если вы все равно можете перезагрузить его.
3 ответа
Откройте файл .viminfo .
Следующая команда удалит все строки, которые не являются ни пустыми, ни комментариями, ни историей поиска:
@Rich answer поможет вам предотвратить повторное заполнение этих строк.
Вы можете использовать сам vim для изменения файла, и ваши изменения сохранятся, если вы вызовете его следующим образом:
Начиная с vim с параметром -i задается, какой файл viminfo использовать для этого сеанса. Специальное значение NONE означает, что вообще ничего не сохраняется. Это может быть удобно для редактирования других автоматически генерируемых файлов или конфиденциальных данных.
-i
Если включено использование файла viminfo, этот параметр задает имя файла
использовать вместо ~/.viminfo по умолчанию. Это также можно использовать для
пропустить использование файла viminfo, указав имя NONE .
VIM, кажется, не имеет встроенной команды для этой работы. Но вы можете сделать это в оболочке с помощью «grep». Например, следующая команда очистит историю командной строки, метки файлов, список переходов:
Если вы откроете .viminfo, вы обнаружите, что история командной строки начинается с «:», метка файла начинается с «'», а список переходов начинается с «-».
Vim можно настраивать под собственные нужды. Эта глава поясняет как заставить Vim запускаться с требуемыми опциями, как добавлять модули для расширения функциональных особенностей или определять собственные макросы.
05.1 Файл vimrc
Возможно вы уже успели устать от набора команд, которые часто используете. Для запуска Vim с установленными по умолчанию любимыми опциями и привязками, их следует записать в так называемый файл vimrc. Vim читает этот файл при запуске.
Если вы не знаете, где находится ваш файл vimrc, то воспользуйтесь следующей командой:
Один из первых файлов в списке будет называться ".vimrc" или "_vimrc" и он будет расположен в вашем домашнем каталоге.
Если у вас еще нет файла vimrc, то см. vimrc, чтобы выяснить, как его создать. Кроме того, в выводе команды ":version" также есть упоминание о "пользовательском файле vimrc", который ищет Vim.
В Unix всегда используется следующий файл:
В системах MS-DOS и MS-Windows чаще всего используется один из следующих файлов:
Файл vimrc может содержать все команды, начинающиеся с двоеточия. Наиболее простые из них устанавливают те или иные опции. Например, если вам хочется, чтобы Vim всегда запускался с включённой опцией 'incsearch', то добавьте в ваш файл vimrc следующую строку:
Для того, чтобы эта строка начала работать, необходимо выйти из Vim и заново запустить его. Позднее мы научимся это делать без выхода из Vim.
В этой главе объясняются только самые основные вещи. Более подробно о написании файла сценария Vim читайте здесь: Написание сценариев Vim.
05.2 Пример файла vimrc с пояснениями
В первой главе было показано, как примерный файл vimrc, включённый в пакет Vim может быть использован для запуска Vim в несовместимом режиме (см. несовместимость). Этот файл можно найти здесь:
В этом разделе мы покажем как использовать различные команды в этом файле. В итоге у вас появится представление о том, как создавать собственные настройки. Тем не менее здесь не будет дано подробных пояснений, для этого можно воспользоваться командой ":help".
Как уже говорилось в первой главе, руководство подразумевает, что вы работаете с Vim в улучшенном режиме, который не всегда совместим с Vi. Для этого прежде всего необходимо выключить опцию 'compatible' указанной выше командой.
Эта опция определяет где в режиме Вставки кнопка может удалять символ перед курсором. Перечисленные через запятую значения позволяют Vim удалять пробелы в начале строки, символы переноса строки и символ, перед которым был осуществлён переход в режим Вставки.
Эта опция указывает Vim, что надо использовать отступ предыдущей строки для вновь созданной строки. Таким образом, перед новой строкой образуется то же самое количество пробелов, как и на предыдущей строке. Например, при нажатии в режиме Вставки или при использовании команды "o" для открытия новой строки.
Это позволяет Vim оставлять резервную копию файла при записи, за исключением системы VMS, которая всегда хранит старые версии самостоятельно. Резервная копия файла имеет то же самое имя, что и оригинал, с добавлением "~". См. Резервные копии файлов.
Хранить в истории 50 команд и 50 шаблонов для поиска. Если вы пожелаете запоминать меньше или больше строк, то можно поставить другое число.
Линейка позволяет всегда показывать текущее положение курсора в нижнем правом углу экрана Vim.
Показывать незавершённую команду в правом нижнем углу экрана Vim, слева от линейки. Например, при наборе "2f", Vim ожидает ввода символа, который требуется найти и показывает "2f". После нажатия "w" выполняется команда "2fw" и "2f" исчезает с экрана.
Показывает соответствие шаблону поиска во время набора шаблона.
Определяет привязку кнопки. Подробнее об этом говорится в следующем разделе. В данном случае определяется, что команда "Q" выполняет форматирование при помощи оператора "gq". Именно так это работало до Vim 5.0. В противном случае команда "Q" начинает режим Ex, но он вам вряд ли потребуется.
Это также привязка, но более сложная. Мы не будем здесь объяснять как она работает, но смысл её заключается в следующем: "p" в Визуальном режиме переписывает выбранный текст вклеенным при помощи этой команды. Как видите, привязки могут делать довольно сложные вещи, оставаясь при этом всего-навсего последовательностью команд, исполняемых как если бы вы их сами набрали на клавиатуре.
Эти команды включают подсветку синтаксиса на терминалах, где есть поддержка цвета. Опция 'hlsearch' заставляет Vim подсвечивать соответствия последнему шаблону поиска. Команда "if" очень полезна для установки опций при соблюдении определённых условий. Подробнее об этом написано в Операторы и перемещения.
Это позволяет включить три интеллектуальных механизма:
Эта команда заставляет Vim переносить строки, если они становятся длиннее 78 символов, для файлов, которые были определены как обычный текст. В команде фактически две части. "autocmd FileType text" является автокомандой, определяющей, что последующая команда выполняется всякий раз, когда тип файла определён как "обычный текст". "setlocal textwidth=78" присваивает опции 'textwidth' значение 78 для данного файла.
Ещё одна автокоманда. В данном случае она выполняется после чтения файла. Сложный набор команд после неё ищет, если была определена отметка '" и осуществляет прыжок к этой отметке. Обратная косая черта в начале строки используется для продолжения команды с предыдущей строки, чтобы строка не была слишком длинной. См. продолжение строки. Этот синтаксис работает только в файле сценария Vim, но не в командной строке.
05.3 Простые привязки кнопок
Привязка позволяет вам повесить серию команд Vim на единственную кнопку. Предположим, что вам требуется часто выполнять операцию помещения отдельных слов в фигурные скобки, т.е. заменять слово вроде "количество" на слово "". При помощи команды :map вы можете указать Vim что для этой цели следует использовать кнопку F5. Сама команда выглядит так:
Замечание: При наборе этой команды вы должны вводить буквально, путём ввода четырёх символов на клавиатуре. также вводится в пять символов, а не нажатием кнопки . Помните об этом при чтении данного руководства!
Давайте разберёмся, что происходит, по порядку:
Функциональная кнопка F5 будет использована для запуска последующей серии команд. | |
i | Вставить символ <. |
e | Переместиться к концу слова. |
a> | Добавить > в конце слова. |
После того, как вы выполните команду ":map", всё что требуется сделать для того, чтобы заключить слово в фигурные скобки, это подвести курсор к первому символу слова и нажать F5.
В этом примере в качестве переключателя привязки используется единственная клавиша, но это может быть любая строка. Следует, однако, иметь в виду, что при использовании существующей команды Vim эта команда больше не будет доступна, поэтому таких ситуаций лучше избегать.
Одним из символов, которые полезно использовать с привязками, является обратная косая черта. Поскольку вам вероятно захочется определить несколько привязок, то добавьте еще какой-нибудь символ. Например, вы можете определить, что "\p" будет добавлять скобки вокруг слова, а "\c" будет добавлять фигурные скобки. Например:
Вам потребуется набирать \ и p достаточно быстро друг за другом, чтобы Vim понимал, что они связаны друг с другом.
Команда ":map" без аргументов показывает список текущих привязок, как минимум для Обычного режима. Подробнее о привязках читайте в разделе 40.1.
05.4 Добавление внешнего модуля
Функциональность Vim может быть расширена за счёт внешних модулей. Модулем является сценарий Vim, который подгружается автоматически при запуске Vim. Добавить модуль можно поместив соответствующий файл сценария в каталог plugin.
Существует два типа модулей:
общие модули: | Используются для всех типов файлов |
модули типа файла: | Используются только для определённых типов файла |
Сначала мы обсудим общие модули, а затем рассмотрим модули типов файла.
ОБЩИЕ МОДУЛИ
При запуске Vim автоматически загружает ряд общих модулей. Такие модули добавляют функциональные особенности, которые хотелось бы использовать большинству пользователей, но были реализованы в виде подгружаемого модуля, а не прошиты в код редактора. Список стандартных модулей можно посмотреть здесь: Стандартные модули расширения. Также смотрите Загрузка модулей.
Вы можете добавить общий модуль для расширения функциональности, чтобы он всегда подгружался при запуске Vim. Для этого требуется выполнить всего две операции:
- Найти требуемый модуль.
- Поместить его в правильный каталог.
ГДЕ ВЗЯТЬ НУЖНЫЙ МОДУЛЬ ОБЩЕГО НАЗНАЧЕНИЯ?
Где найти необходимые модули?
ИСПОЛЬЗОВАНИЕ ОБЩЕГО МОДУЛЯ
Прочитайте внимательно текст модуля, чтобы узнать о правилах его использования. Скопируйте файл модуля в каталог модулей:
Система | каталог модулей ~ |
Unix | ~/.vim/plugin/ |
PC и OS/2 | $HOME/vimfiles/plugin или $VIM/vimfiles/plugin |
Amiga | s:vimfiles/plugin |
Macintosh | $VIM:vimfiles:plugin |
Mac OS X | ~/.vim/plugin/ |
RISC-OS | Choices:vimfiles.plugin |
Пример для Unix (предположим, что у вас пока нет каталога для модулей):
Вот и всё! Теперь вы можете использовать команды, определённые в этом модуле для выравнивания текста по обоим краям.
МОДУЛИ ТИПА ФАЙЛА
Vim распространяется с набором модулей для ряда типов файлов, которые можно начать использовать при помощи команды
Вот и всё, что для этого требуется. См. vimrc filetype.
Если у вас нет модуля для какого-то определённого типа файла, или вы нашли более качественный модуль, то можете его добавить в свою систему. для этого нужно:
- Получить копию модуля.
- Поместить её в правильный каталог.
ГДЕ ВЗЯТЬ МОДУЛЬ ТИПА ФАЙЛА?
Там же, где берутся общие модули. Посмотрите, если есть указание типа файла, то это модуль типа файла. Сценарии в $VIMRUNTIME/macros являются общими, а модули типов файла находятся в $VIMRUNTIME/ftplugin.
ИСПОЛЬЗОВАНИЕ МОДУЛЯ ТИПА ФАЙЛА
Модули типов файла добавляются копированием в необходимый для этого каталог. Он находится там же, где и каталог для модулей общего назначения, но называется "ftplugin". Предположим, у вас есть модуль для типа файла "stuff" и вы работаете на Unix. Тогда вам нужно поместить этот файл в каталог ftplugin:
Если такой файл уже существует, то значит у вас уже есть модуль для типа файла "stuff". Проверьте, не конфликтует ли существующий модуль с модулем, который вы хотите добавить. Если всё в порядке, то вы можете присвоить новому модулю другое имя:
Символ подчёркивания используется для отделения названия типа файла от остальной части имени, которая может быть чем угодно. Название "otherstuff.vim" не будет работать, поскольку такой файл будет загружаться для типа файла "otherstuff".
На MS-DOS нельзя использовать длинные имена файлов. Если тип файла содержит более шести символов, то при добавлении дополнительного модуля у вас возникнут проблемы. Для решения проблем такого рода можно использовать подкаталог:
В общем случае, имена для модулей типа файла следующие:
В качестве "" можно использовать любое имя. Например, для типа файла "stuff" на Unix:
Часть имени это название типа файла, для которого будет применяться данный модуль. Только файлы данного типа будут использовать настройки, взятые из модуля. не имеет значения и может использоваться для загрузки дополнительных модулей для данного типа файла.
Замечание: модуль должен иметь расширение ".vim".
-
и информация о том, как избежать привязок, которые могут вызвать проблемы. при запуске Vim. , заданных в модулях общего назначения. и советы о том, что делать, когда не модуль работает. .
05.5 Добавление файла справки
Если вам повезло, то модуль, который вы установили, поставлялся вместе с файлом справки. Давайте посмотрим, как правильно установить файл справки, чтобы он был доступен в справочной системе.
Возьмём, например, модуль "matchit.vim" (он поставляется вместе с Vim). Этот модуль позволяет использовать команду "%" в том числе для перемещения между соответствующими друг другу тегами HTML, if/else/endif в сценариях Vim и т.д., одним словом чрезвычайно полезная вещь, но, к сожалению, без обратной совместимости, по причине чего он не включён по умолчанию.
У этого модуля есть файл справки: "matchit.txt". Для начала скопируем модуль в необходимый каталог. На этот раз сделаем это непосредственно из Vim, используя переменную окружения $VIMRUNTIME. (Если у вас уже есть необходимый каталог, то можно пропустить некоторые команды "mkdir".)
Теперь создадим каталог "doc" в одном из каталогов, указанных в 'runtimepath'.
Скопируем в него файл справки:
А теперь, самое интересное: создадим местный файл меток, который позволит перемещаться к темам в новом файле справки при помощи команды :helptags.
Теперь можно пользоваться командой
чтобы найти "g%" в файле справки, который мы только что добавили. Когда вы наберёте
то увидите соответствующую ссылку в файле справки. Заголовки местных файлов справки автоматически добавляются в этот раздел.
О написании собственного файла справки см. Создание справки.
05.6 Окно опций
Справочник по опциям редактора можно посмотреть здесь: |опции|. Альтернативным вариантом может служить использование команды
Эта команда открывает новое окно со списком опций. Каждой опции соответствует краткое пояснение. Опции в этом окне группируются по темам. Для перехода к списку опции, существующих для данной темы, подведите курсор к требуемой теме и нажмите . Повторное нажатие возвращает вас назад к списку тем. Вы также можете использовать CTRL-O.
Значение опции можно изменять прямо в окне. Например, подведите курсор к теме "отображение текста", затем переместите курсор вниз к строке
Когда вы нажмёте , то строка изменится на
Это значит, что теперь эта опция отключена.
Краткое описание опции 'wrap' можно прочитать над данной строкой. Переместите курсор на одну строку вверх и нажмите для перехода к полному тексту справки по опции 'wrap'.
У тех опций, которые принимают числовое или строковое значение, можно редактировать это значение прямо в окне опций. Для того, чтобы изменения вступили в силу, нажмите . Например, переместите курсор на несколько строк вверх к строке
Поместите курсор на цифре ноль при помощи команды "$". Измените ноль на пять командой "r5". Теперь нажмите , чтобы новое значение опции вступило в силу. Вы заметите, что теперь, когда вы перемещаете курсор, прокрутка окна начинается до того момента, как курсор подходит к границе окна. Именно это и делает опция 'scrolloff', она указывает на отступ от границы экрана, где начинается прокрутка.
05.7 Часто используемые опции
В редакторе существует огромное множество опций. Большую часть из них вы наверняка никогда не будете использовать. Упомянем те, которые, напротив, могут оказаться наиболее полезными. Не забудьте, что по каждой опции можно получить справку при помощи команды ":help", имя опции при этом следует заключать в одинарные кавычки. Например:
Если вы что-то напутали с установками значения опции, то можно восстановить значение по умолчанию при помощи символа амперсанда (&) после имени опции. Например:
ОТКЛЮЧЕНИЕ ПЕРЕНОСА СТРОК
Vim обычно переносит длинные строки, чтобы вы могли видеть весь текст целиком. Иногда вам может потребоваться, чтобы строки не переносились, а продолжались в правой части экрана. В этом случае вам потребуется пользоваться горизонтальной прокруткой, чтобы просматривать фрагменты длинной строки. Перенос строк отключается командой:
Vim автоматически прокручивает текст в окне, если вы перемещаетесь к тексту, который не показан на экране. Чтобы видеть 10 символов рядом с курсором, воспользуйтесь командой
Это не изменяет сам текст в файле, только способ его отображения.
ПЕРЕНОС КОМАНД ПЕРЕМЕЩЕНИЯ
Большинство команд перемещения останавливаются в начале и конце строки. Это поведение можно изменить при помощи опции 'whichwrap'. Следующая команда устанавливает эту опцию в значение по умолчанию:
Такая настройка позволяет кнопке , когда она используется в первой позиции строки, перемещать курсор в конец предыдущей строки. Кнопка (пробел) перемещает курсор от конца строки к началу следующей.
Для того, чтобы кнопки курсора и также могли переносить курсор между строками, используйте команду:
Однако, это будет работать только в Обычном режиме. Чтобы кнопки и вели себя похожим образом и в режиме Вставки, используйте команду:
Можно также добавить еще несколько флагов, см. 'whichwrap'.
ПРОСМОТР ТАБУЛЯЦИИ
Символы табуляции в файле, как правило, не видны. чтобы сделать их видимыми используйте команду:
Теперь каждый символ Tab отображается в виде ^I. Кроме того, в конце строки отображается $, так что вы можете сразу видеть лишние пробелы в конце строк.
К сожалению, когда в файле много символов табуляции, то текст в этом режиме начинает напоминает кашу. На терминалах, поддерживающих цвет, а также в графическом интерфейсе, Vim может показывать пробелы и символы табуляции в виде подсвеченных символов. Воспользуйтесь опцией 'listchars':
Теперь каждый символ табуляции будет показан в виде ">---" (с разным количеством символов "-"), а пробелы на конце строк в виде "-". Гораздо приятнее, правда?
КЛЮЧЕВЫЕ СЛОВА
Опция 'iskeyword' определяет, какие символы могут появляться в слове:
Иногда вам может понадобиться включить в список словарных символов символ "минус", чтобы команды вроде "w" считали такие слова, как "что-то" одним словом. Это можно сделать так:
Если вы посмотрите на новое значение, то увидите, что Vim добавил для вас запятую.
Очень странно, с одной стророны тема довольно банальная, а с другой ни тут, ни на просторах интернета не видно хорошего понимания такой важной темы, которая может иногда сильно упростить задачу редактирования текста. К написанию меня подтолкнуло обсуждение макросов в Emacs в блоге Avdi Grimm'а, где в своё время никто не смог внятно объяснить, что в Vim есть то, чего ожидает автор поста от достойного текстового редактора. Исправим это, в первую очередь в себе, а потом пойдём и скажем этим из интернета, что они не правы.
Какие задачи редактирования текста помогут решить макросы? Например, такую: вот в этой самой строке, которую вы читаете, взять и все запятые поменять на 0. Можно вспомнить регулярные выражения, но не все их любят, и уж тем более не все помнят, как вставлять с их помощью перенос строки, а если вам нужно заменять какие-то символы, которые используются в регулярных выражениях как служебные, вы уже отвлеклись от своей основной задачи и вместо редактирования текста занимаетесь написанием регулярного выражения для поиска и замены, пробуя и ошибаясь.
Макросы позволят это сделать быстрее, с меньшим отвлечением на вспоминание и написание чего-либо. Запомнить как работают макросы очень легко, и это войдёт в ваш ежедневный аресенал наряду с прыжками по тексту.
В этом топике мы научимся использовать макросы с этой самой задачей.
Давайте сначала вспомним, как это сделать вручную.
f,r0
После чего можно нажимать последовательно ; для повторного поиска и . для повторения предыдущего действия. Но в какой-то момент это может стать не так просто, например, вам нужно добавить пару каких-то знаков между делом. Точка уже не сработает и нужно будет опять нажимать r0 . Или этих запятых окажется довольно много, и щёлкать поочерёдно ; и . придётся довольно много раз. В этот момент что-то вам уже подсказывает, что такой механический труд можно автоматизировать.
Основы
Для записи и хранения макросов в Vim используются регистры. Те самые, в которые можно копировать текст и те самые, на которые можно ставить пометки. Регистры обозначаются латинскими буквами без учёта регистра (a и A — один и тот же регистр), цифрами, и даже специальными символами, то есть хватит их на всех.
Важно. В регистрах хранится не что-то магическое, в регистрах хранится простой текст.
Для записи макроса в регистр a вопспользуемся следующей командой:
qaf,r0q
Первый кю q запускает запись макроса, и так до нажатия q для подтверждения записи.
Теперь, чтобы запустить макрос повторно, нам нужно нажать @a , и запустится на выполнение макрос, хранящийся в регистре a . Мы можем традиционно для Vim написать 100@a , и макрос будет выполнен 100 раз, заменив 100 или меньше (если в строке их меньше) запятых на 0 .
Многократные повторения и рекурсивный вызов
Иногда сколько у нас запятых в строке мы не знаем, поэтому после запуска 100@a нам приходится вручную проверять, не осталось ли ещё.
Можно довольно просто сделать так, чтобы макрос вызывал сам себя. Запишем тот же самый макрос, который нужно будет вызывать всего один раз, а дальше он будет сам вызывать себя:
qaf,r0@aq
В данном случае, его запись ещё не произозшла, но запуск уже указан. Важно, чтобы в этом регистре ничего на момент записи не хранилось. Для этого есть два способа. Первый — это чистить содержимое регистра перед записью ещё тремя нажамиями, qaq , то есть записью пустой последовательности. Второй — это делать вызов последнего вызыванного макроса с помощью @@ .
Важно. Выполнение цепочки или серии исполнения макросов приостанавливается в тот самый момент, когда одна из команд fFtT , то есть поиска символа в строке, не удаётся. То есть, например, у нас не осталось больше в строке запятых. Естественно, даже если вы указали, что макрос нужно выполнить 100 раз, а запятых было всего две, макрос выполнится два раза, а на третий остановится на поиске и больше продолжать не будет. Точно так же с рекурсивным макросом.
Удобно то, что при записи макроса происходит его первое исполнение, то есть мы сразу видим, правильно ли его записали.
Редактирование макросов
Если что-то пошло не так, и хочется увидеть, что же мы записали, можно воспользоваться стандартной функцией Vim, и вставить содержимое регистра a прямо в текст: "ap .
Прямо в редакторе вы увидите текст, который является последовательностью команд:
Допустим, вы решили, что менять текст нужно не на 0 , а на 1 , и вы редактируете текст макроса:
и копируете его в регистр a с помощью 0"ay$ .
Вечные макросы
Стоит заметить, что регистры постоянны, если вы выйдете из Vim, а потом зайдёте снова, содержимое регистра останется неприкосновенным. Хранится оно по умолчанию в файле ~/.viminfo .
Важно. Содержимое регистра легко случайно перезаписать, и если вы хотите, чтобы какие-то макросы существовали в каких-то регистрах постоянно, имеет смысл добавить их в .vimrc , или лучше в отдельный файл с макросами, включаемый в .vimrc :
Всякое
Макросы совсем не обязательно действуют в рамках одной строки, попробуйте прыжки по параграфам в макросах для изменения регистра первого слова на верхний.
Чтобы избежать случайных переходов по нажатию Q в Ex режим, имеет смысл назначить Q на вызов предыдущего макроса:
Полезная информация:
:help registers
:help :registers
:help :recording
Vim хранит историю ex-команд (доступную через : ↑ и q : ), и эта история сохраняется после выхода.
Если я запускаю несколько экземпляров Vim (один и тот же пользователь, один и тот же домашний каталог), как Vim осуществляет арбитраж между историями команд? Кажется, что последний процесс для выхода выигрывает. Есть ли способ сохранить историю команд всех экземпляров?
@ Doorknob Убедитесь, что ваша ~/.viminfo собственность принадлежит вам. Распространенная ошибка - запускать людей, sudo vim . которые, если вы ранее не запускали vim от имени своего собственного пользователя, будут созданы ~/.viminfo как root. Если это проблема, я бы предложил научиться использовать sudoedit или sudo -e редактировать привилегированные файлы.
@jamessan Да, похоже, это действительно была проблема; chown 'мой мой .viminfo обратно к себе исправил. (Не уверен, как его владелец изменился на root, так как я всегда использовал sudoedit , ну да ладно.)
Ответ на ваш заглавный вопрос - это то, что вы заметили. Из руководства пользователя vim :help 21.3
Когда вы запускаете Vim несколько раз, последний выходящий будет хранить его информацию. Это может привести к потере информации, которая ранее была сохранена из Vims. Каждый предмет можно запомнить только один раз.
Дополнительная информация
Описание set viminfo+=nSomePath : Мы используем команду set для настройки названной опции viminfo . += Показывает , что мы хотим , чтобы добавить к выбору, а не изменить все. Мы добавляем n параметр, который указывает имя файла для viminfo. Сразу после n того, как у нас SomePath будет имя файла, используемого для сохранения viminfo.
Документация для wv ( :help wv ) указывает, что эта команда сначала прочитает файл viminfo, а затем объединит старую и новую информацию. Пока у меня нет информации о том, как происходит слияние в этом случае, но я предполагаю, что он сохраняет метки для неизвестных файлов и регистров, которые не установлены в текущем сеансе.
Настройка альтернативных файлов viminfo
Для управления уровнем проекта мы хотим настроить vim для сохранения вашего viminfo в другом файле. Это может быть сделано в работающем vim перед выходом или вашим vimrc, например, в вашем vimrc могут быть строки, которые определяют, что определенный каталог принадлежит проекту.
Пример того, как vimrc автоматически устанавливает это на основе каталога:
Результатом вышеизложенного является то, что история проекта будет загружена при запуске и сохранена при выходе, если vim запущен в каталоге / projects / projA.
Загрузите альтернативный viminfo во время запуска
Это хорошо для случая, когда вы хотите сохранить свою историю в сторону и загрузить ее позже, не управляя ею на уровне проекта.
Во-первых, чтобы сохранить историю, вы добавляете к опции viminfo, как указано выше, перед выходом. Затем, чтобы загрузить историю, запустите vim с опцией -i
Если вы не хотите выходить из vim для сохранения файла viminfo, вы можете использовать :wv ( :wviminfo ). Это сохранит файл viminfo без выхода из vim в соответствии с настройкой n выше. Вы также :wv SomeOtherFile можете сохранить в месте, которое не совпадает с настройкой параметра viminfo. Это может быть более удобным, чем настройка имени файла для использования при выходе, но не мешает vim использовать файл по умолчанию после его выхода.
Например, в первом vim:
и во втором терминале:
Или, если второй vim уже запущен и вы хотите загрузить viminfo:
Обратите внимание , что :wv и :rv не изменить имя файла Vim будет экономить на выходе , ни имя файла для чтения во время запуска.
Читайте также: