Основы использования vifm. Часть 2 | jenyay.net

Основы использования vifm. Часть 2

Содержание

Введение ко второй части

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

Сортировка файлов

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

По умолчанию содержимое отображаемой папки сортируется по имени, причём с учётом регистра букв. Чтобы изменить порядок сортировки, вызовите команду :sort, которая откроет окно с выбором порядка сортировки:

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

Посмотрим, какой параметр изменяется, когда мы таким образом меняем способ сортировки. Давайте сделаем так, чтобы файлы сортировались по времени последнего исправления - вызовем команду :sort и нажмём букву m в меню сортировки. Затем вызовем команду :set без параметров, чтобы увидеть, какие параметры имеют значения, отличные от значений по умолчанию. В результате будет выведен следующий текст.

Ага! У нас появился параметр sort, который равен +mtime,+name. Строго говоря, sort имеет тип "список строк". К этому типу применимы операции += для добавления элемента в список и -= для удаления элемента из списка. Данное значение параметра sort указывает vifm, что файлы нужно упорядочить сначала по времени модификации, а затем по имени в возрастающем порядке (применительно к времени это значит от самой давней даты, к самой новой, то есть сверху будут самые старые файлы).

Мы можем воспользоваться командой :set sort=-mtime,+name, чтобы установить параметр sort самостоятельно таким образом, чтобы сортировка по времени была в обратном порядке, т.е. чтобы последние изменённые файлы были сверху. Каждый раз писать подобные команды не особо удобно, но чуть позже мы разберёмся с тем, как устанавливать горячие клавиши, и для сортировок можно будет сделать свои комбинации клавиш.

Есть ещё один способ инвертировать порядок сортировки. Для этого нужно вызвать команду :invert o. Почему в конце обязательно писать "o"? Просто команда :invert многофункциональная и в зависимости от её аргумента может инвертировать разные списки. Например, команда :invert s инвертирует список выделенных файлов - те файлы, что были не выделены до вызова этой команды, будут выделены, а с выделенных файлов и папок выделение будет снято. Ещё один вариант использования команды :invert мы увидим, когда будем говорить о фильтрах.

В документации вы можете найти все возможные значения для параметра sort, ниже приведены некоторые наиболее часто используемые параметры (как и прежде, квадратные скобки обозначают необязательные элементы).

  • [+-]name - имя (включая расширение);
  • [+-]iname - имя (включая расширение, игнорировать регистр букв);
  • [+-]ext - расширение файлов и папок;
  • [+-]fileext - расширение (только для файлов);
  • [+-]uname - имя владельца файла / папки (только для Linux);
  • [+-]size - размер;
  • [+-]mtime - время последнего изменения файла.

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

Например, на следующем скриншоте показан результат команды :set sort+=dir (добавление параметра dir в список строк параметра sort) для левой панели. Видно, что слева файлы и папки идут вперемешку, а справа сначала идут папки, а затем файлы.

Режимы отображения файлов

До сих пор мы пользовались тем способом отображения файлов и папок, что vifm предлагает по умолчанию, т.е. в виде таблицы с отображением параметров папок и файлов. Но часто нас не интересует размер и дата изменения файлов, и в этом случае хотелось бы выводить только имена файлов, но в несколько столбцов (то, что в некоторых файловых менеджерах называется кратким режимом). Vifm тоже умеет отображать список файлов в таком режиме, для этого нужно вызвать команду :set lsview. Пользователи Linux, наверное, уже догадались, что название булевого параметра lsview произошло от имени программы ls, отображающей список файлов в папке.

Если установить параметр lsview, то текущая панель примет вид наподобие того, что показан на следующем скриншоте:

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

В других файловых менеджерах подобный режим обычно работает по-другому, там таблица заполняется по столбцам. Такой режим появился и в vifm, начиная с версии 0.9.1. Чтобы его активировать, нужно параметр lsoptions установить в значение transposed, т.е. вызвать команду :set lsoptions=transposed.

После вызова этой команды список примет вид:

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

Если нужно перейти обратно в подробный режим отображения файлов, то нужно "сбросить" параметр lsview, вызвав команду :set nolsview.

В vifm 0.9.1 появился ещё один любопытный режим отображения списка файлов, так называемый режим столбцов Миллера, названный так в честь Марка Миллера, который предложил подобный способ отображения древовидных структур в 1980 году. Этот способ отображения также известен как каскадные списки (cascading lists).

Для включения этого режима нужно установить параметр булевого типа millerview с помощью команды :set millerview. После этого текущая панель vifm приобретёт примерно следующий вид:

При таком представлении в левом столбце будет показано содержимое родительской папки, в средней - содержимое текущей папки, а в правом столбце показано содержимое папки под курсором. Если курсор установлен на файле, то правый столбец пропадает:

Чтобы выйти из режима Миллера, нужно вызвать команду :set nomillerview.

Помимо режима Миллера и краткого режима отображения файлов есть ещё несколько команд, меняющих представление папок и файлов. Например, команда :tree, которая включает древовидное отображение папки. Текущая папка становится корнем дерева, а все вложенные папки и файлы отображаются как дочерние.

Следующий скриншот показывает, как одна и та же папка отображается в виде дерева (слева) и в виде списка (справа).

Режим дерева отключается при выборе какой-либо папки или файла клавишей Enter.

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

Чтобы выйти из режима предпросмотра, ещё раз введите команду :view.

Поиск, замена и фильтры

Для поиска файлов vifm предоставляет сразу несколько инструментов. Начнём с простого поиска в текущей папке. Как вы, наверное, знаете в vim есть поиск по тексту с помощью команд / (поиск вперед) и ? (поиск назад). В vifm эти команды работает точно так же, только поиск и выделение работает применительно к списку файлов.

Если в нормальном режиме нажать клавишу /, то в нижней части окна будет предложено ввести строку для поиска. После нажатия Enter будут выделены файлы, которые содержат введённую строку, а найденная подстрока, удовлетворяющая поиску, будет выделена другим цветом. После этого можно использовать команду n для перемещения к следующему файлу, чьё имя удовлетворяет строке поиска, и команду N, если нужно переместиться не вперед, а назад. В качестве примера на следующем скриншоте показан результат поиска файлов, содержащих строку "zip".

В строке поиска можно использовать регулярные выражения. Тема регулярных выражений выходит за рамки этой статьи, поэтому просто в качестве примера ниже приведён результат поиска файлов, оканчивающихся на "zip", или выражаясь языком регулярных выражений: "zip$"

По умолчанию пока вы вводите строку поиска, vifm ничего не делает, но если вы установите булев параметр incsearch с помощью команды :set incsearch, то уже по мере ввода строки поиска vifm начнёт искать нужные файлы, сужая поиск по мере того, как вы продолжаете ввод. При этом курсор будет перескакивать на первый удовлетворяющий поиску файл (или папку).

Чтобы очистить результат поиска (убрать выделение найденных выражений), используется команда :nohlsearch или просто :noh.

С поиском тесно связана команда замены. Как вы, наверное, знаете, в vim для этого используется команда :s, и в vifm используется она же (или полное название команды - :substitute). Работает эта команда аналогично, только замена осуществляется в именах файлов. Полный формат этой команды в документации выглядит так:

:[range]s[ubstitute]/pattern/string/[flags]

Перед командой s можно указать интервал строк, где будет работать замена (по умолчанию считается, что искомую строку нужно заменить во всех файлах текущей папки), затем указывается шаблон поиска (регулярное выражение), строку замены и необязательные флаги. В данный момент поддерживаются три флага: i - поиск без учёта регистра символов, I - поиск с учётом регистра символов и g - заменять все найденные строки в каждом файле, а не останавливаться после первой замены в имени файла. Два флага i и I нужны из-за того, что в настройках vifm можно устанавливать режим поиска по умолчанию (с учётом регистра символов или без учёта) с помощью булевого параметра ignorecase или просто ic.

Например, если мы хотим заменить расширение .bak на .tmp во всех файлах в текущей папке (не затрагивая вложенные папки), то нужно выполнить команду :s/\.bak$/.tmp/i.

Замечательное свойство vifm заключается в том, что эта команда отменяемая. Отмена в vifm работает так же как и в vim - с помощью клавиши u в нормальном режиме. Если выполнить замену, а затем нажать клавишу u, то замена будет отменена, а файлы получат первоначальное имя. Чтобы вернуть только что отменённое действие, нужно в нормальном режиме нажать комбинацию клавиш Ctrl+R.

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

После нажатия клавиши = в нижней части окна также будет предложено ввести строку поиска, но в этот раз после нажатия Enter (или по мере ввода строки поиска, если установлен параметр incsearch) вместо выделения файлов, из списка пропадут файлы, не удовлетворяющие введённому критерию. В этом режиме тоже можно использовать регулярные выражения.

Например, следующий скриншот показывает результат работы команды =zip.

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

Таким образом мы рассмотрели несколько специальных символов, которые переключают vifm в различные режимы: / и ? - в режим поиска, : - в режим ввода команд, а = - в режим фильтра.

Также для фильтрации списка файлов и папок существует более мощная команда :filter, которая работает противоположно команде =, т.е. команда :filter скрывает файлы, удовлетворяющие строке поиска.

Например, если мы хотим скрыть все файлы, оканчивающиеся на ".bak", то мы должны выполнить команду :filter \.bak$. Обратный слеш должен быть в регулярном выражении для экранирования, чтобы точка воспринималась как символ точки, а не как подстановочный символ регулярного выражения.

Если мы хотим наоборот показать только файлы, удовлетворяющие фильтру, то нужно выполнить команду :invert без аргументов, и тогда в списке файлов отобразятся отфильтрованные файлы, а остальные файлы будут скрыты. Как вы помните, мы уже использовали команду :invert o для изменения порядка сортировки (order) файлов в списке.

Можно сразу инвертировать результат работы фильтра, для этого нужно вместо команды :filter использовать команду :filter!. Если мы хотим отобразить только файлы с расширением .bak, то можно выполнить команду :filter! \.bak$.

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

Регулярное выражение для команды :filter можно заключать в прямые слеши. То есть предыдущая команда для скрытия файлов .bak могла бы выглядеть следующим образом: :filter /\.bak$/. Это может быть полезно, если нужно указать параметры регулярного выражения. Например, по умолчанию поиск осуществляется с учётом регистра, т.е. в данном примере не были бы скрыты файлы с расширением .BAK заглавными буквами. Чтобы отфильтровать эти файлы независимо от регистра символа, нужно добавить параметр i в регулярное выражение, т.е. выполнить команду :filter /\.bak$/i

Запуск программ

Иногда (хотел написать "часто", но это зависит от вашей работы за компьютером) при работе с файловым менеджером нужно не только копировать или удалять файлы, но и запускать программы из командной строки. Vifm позволяет это сделать, не переключаясь на другую программу, причём запускать приложения из консоли можно разными способами.

Если нужно запустить единственную команду, и вас не интересует, какой текст она выведет в консоль (если нет ошибок), то для этого предназначена команда вида :!программа параметры. В качестве параметров можно использовать все возможности, предоставляемые операционной системой. Например, если под Linux вы хотите вывести в файл ls.txt содержимое папки /usr/bin/, то можно выполнить следующую команду: :!ls /usr/bin > ls.txt.

В этом примере специально предложено сделать перенаправление в файл, поскольку если запустить команду :!ls /usr/bin, то на экране быстро что-то промелькнёт, а потом опять откроется окно vifm. Но если в команде произойдёт ошибка, то vifm не скроет результат вывода, пока вы не нажмёте Enter.

Если вы не хотите, чтобы результат работы команды сразу скрылся, то нужно выполнить команду в формате :!!программа параметры - обратите внимание на два восклицательных знака в начале. В этом случае после любого результата выполнения команды вам будет предложено нажать Enter, после чего вы вернетесь в vifm.

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

  • %c - файл, на котором стоит курсор в данный момент времени на активной панели.
  • - файл, на котором стоит курсор в данный момент времени на противоположной панели.
  • %f - все выбранные файлы на активной панели.
  • %F - все выбранные файлы на противоположной панели.
  • %d - полный путь до текущей папки активной панели.
  • %D - полный путь до текущей папки противоположной панели.

Например, если вы хотите открыть выбранный файл в редакторе gedit, то для этого нужно выполнить команду :!gedit %c.

На самом деле макросы можно использовать не только в сочетании с командой :!..., но и в других командах, начинающихся с :. Например, в vifm есть встроенная команда :cd, которая меняет текущую папку в активной или неактивной панелях. Если мы хотим сделать так, чтобы на противоположной панели отобразились файлы из активной панели, то можно выполнить команду :cd d. Здесь первый аргумент %d указывает, какую папку нужно отображать в активной панели, а второй аргумент - в неактивной панели. Если мы хотим поменять местами панели, то можно выполнить команду :cd d.

В примере с командой :!gedit %c есть один недостаток. Пока мы не закроем редактор gedit, vifm будет отображать консоль, в которой запущен этот редактор, и самим vifm мы не сможем воспользоваться. Нам нужно запустить gedit в фоновом режиме, чтобы vifm продолжал работать. Для этого достаточно в конец команды добавить символ & (этот приём должен быть знаком линуксоидам, часто работающим в консоли). Если выполнить команду :!gedit %c &, то откроется редактор gedit с выбранным в данный момент файлом, а сам vifm продолжит работу.

Мы можем увидеть список запущенных фоновых процессов с помощью команды :jobs. Например, на следующем скриншоте показан результат работы команды :jobs после того, как из vifm были запущены программы gedit, gimp и outwiker:

В открывшемся списке вы можете выбрать любую задачу и с помощью команды dd "убить" её. Для выхода из режима просмотра задач можно нажать или клавишу Enter, Esc, q, или ввести команду :q.

Если нужно запустить не одну, а несколько команд в консоли, может оказаться удобным временно скрыть vifm и открыть полноценную консоль. Для этого достаточно выполнить команду :shell или сокращённый вариант - :sh. Откроется консоль, выйти из которой можно, нажав комбинацию клавиш Ctrl+D.

Закладки

При работе с файлами иногда приходится постоянно переключаться между небольшим набором постоянно используемых папок. Каждый раз искать нужную папку в файловой системе не удобно, хочется иметь возможность сохранять закладки на наиболее часто используемые папки. Для этой задачи vifm предоставляет два инструмента - метки (marks) и закладки (bookmarks).

Начнём рассмотрение с меток, поскольку они близки по смыслу с метками, которые существуют в vim. Метка предназначена для сохранения ссылки на конкретный файл. У каждой метки есть односимвольное имя, которое может быть буквой латинского алфавита в нижнем регистре, буквой латинского алфавита в верхнем регистре или цифрой, то есть всего может быть установлено 62 метки. Для установки новой метки используется команда m<имя_метки>. Например, если нужно установить метку с именем a, то нужно установить курсор на нужный файл и нажать клавиши ma. Обратите внимание, что если в устанавливаете метку с именем, которое уже было занято, то новая метка перезапишет старую без вопросов и подтверждения, поэтому такие метки лучше рассматривать как то-то временное.

Чтобы увидеть список меток, установленных в данный момент, вызовите команду :marks. В результате выполнения этой команды откроется окно со списком всех меток. Если вы хотите перейти на какую-то из них, выберите её и нажмите Enter. На следующих скриншотах показано такое окно после установки трёх меток - B, b и d.

Есть более быстрый способ перейти к нужной метке - это нажать последовательность клавиш '<имя_метки> - первая клавиша здесь - это одинарная кавычка. Например, если нужно перейти к метке с именем d, то надо ввести команду 'd. Это очень быстро и удобно, когда вам надо постоянно переключаться между небольшим набором папок.

Метки отлично подходят в качестве хранилища временных ссылок на папки и файлы, которые нужны для работы в данный момент, а не как постоянное хранилище закладок. Для долговременного хранения ссылок лучше подходят закладки (bookmarks).

Закладки, в отличие от меток, ссылаются на папку, а не на файл. Каждая закладка должна быть помечена хотя бы одним тегом, что позволяет создавать что-то вроде тематических подборок закладок - "работа", "развлечения", "мои проекты" и т.д.

Чтобы добавить текущую папку в закладки, нужно выполнить команду :bmark <тег или теги>. Теги разделяются пробелами. Например, если нужно поместить текущую папку в закладки и пометить её тегами doc и work, то нужно ввести команду :bmark doc work.

Чтобы увидеть список всех закладок, введите команду :bmarks. Откроется окно с перечислением закладок и тегами в квадратных скобках около них. В этом окне можно выбрать нужную закладку и нажать Enter, тогда вы перейдете к этой закладке. На следующих скриншотах показан подобный список закладок.

Если вы хотите, чтобы vifm показал только закладки, отмеченные определённым тегом, то нужно ввести команду :bmarks тег, например, :bmarks doc. Команде :bmarks можно передать несколько тегов, тогда это сузит поиск, и будут показаны только те закладки, которые отмечены всеми тегами.

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

Добавление комбинаций клавиш

К этому моменту мы познакомились уже с большим количеством команд и поняли, что vifm - это мощный инструмент. Но часто набирать длинные команды может надоесть, хочется иметь возможность назначать горячие клавиши для часто используемых операций, а ещё было бы неплохо приблизить vifm к классическим файловым менеджерам и установить общепринятое поведение для клавиш с F3 по F8, т.е. просмотр, редактирование, копирование, перенос, создание папки и удаление соответственно.

Vifm предоставляет множество команд для тонкой настройки горячих клавиш, но мы рассмотрим только небольшое количество команд, которые показывают основные принципы работы с горячими клавишами. Мы будем изменять только горячие клавиши для нормального режима vifm, но также есть команды для изменения горячих клавиш при вводе команд (после нажатия клавиши :), в режиме просмотра, меню и диалогах.

Для установки новой горячей клавиши, которая должна работать в нормальном и визуальном режиме, предназначена команда :map, которая принимает два аргумента: новую горячую клавишу (или последовательность нажатия клавиш), а также последовательность клавиш, которую будет имитировать новая горячая клавиша.

Например, если мы хотим, чтобы с помощью клавиши Пробел мы могли пометить текущий выбранный файл, а затем перейти к следующему файлу (так делают многие файловые менеджеры), Можно выполнить следующую команду: :map <space> tj. Напомню, что клавиша t в нормальном режиме устанавливает / снимает пометку с выбранного в данный момент файла, а j переводит курсор вниз на следующую строку.

При задании последовательности клавиш могут возникнуть вопросы о том, как записываются особые клавиши наподобие Enter, Backspace, Пробел и т.д. Все эти клавиши описаны в соответствующем разделе документации. Например, клавише Enter соответствует символьное описание <cr>, Backspace - <bs>, Пробелу - <space>.

Часто нужно сделать так, чтобы горячая клавиша вызывала какую-то команду. В этом нет никаких хитростей, в качестве второго аргумента команды :map просто указываете последовательность клавиш, которые бы вы нажимали, если бы вызывали нужную команду вручную (не забудьте в конце добавить <cr> - аналог нажатия клавиши Enter. Например, если вы не хотите каждый раз набирать команду :bmarks для показа списка закладок, можно назначить для этой команды горячую клавишу (например, Ctrl+\, как это сделано в Midnight Commander) с помощью команды :map <с-\> :bmarks<cr>.

В предыдущем примере обратите внимание на то, как записываются комбинации клавиш, использующих Ctrl. Аналогично, комбинации клавиш с использованием Shift записываются как <s-...>, а с Alt - <a-...>.

В качестве тренировки давайте установим горячие клавиши, принятые во многих файловых менеджерах. Эти примеры я взял из своего vifmrc, поэтому кое-где проскакивают мои личные предпочтения.

  • F3 - просмотр выбранного в данный момент файла. :map <f3> :!gvim -R %f &<cr>. В данном случае в качестве редактора для просмотра установлен gvim, которому кроме имени текущего файла (макрос %f) передан параметр -R, обозначающий, что файл должен быть открыт в режиме только для чтения. В конце команды добавлен символ "&", обозначающий, что gvim должен быть запущен в фоновом режиме и не должен блокировать работу vifm.
  • F4 - редактирование выбранного в данный момент файла. :map <f4> :!gvim %f &<cr>. Все то же самое, что и при задании клавиши F3, только gvim запускается без параметра -R.
  • F5 - копирование выбранных файлов в папку на противоположной панели. :map <f5> Y<tab>p<tab>. С помощью клавиши Y копируем ссылки на выбранные файлы, с помощью клавиши Tab переходим на противоположную панель, копируем файлы туда с помощью клавиши p и возвращаемся обратно с помощью клавиши Tab. В vifm есть специальная функция :copy для копирования файлов, но этой команде нужно заранее в качестве аргумента указать, нужно ли перезаписывать имеющиеся файлы. При использовании Y и p будет показан диалог с вопросом пользователю, перезаписывать ли файлы или пропустить.
  • F6 - перемещение выбранных файлов в папку на противоположной панели. :map <f6> Y<tab>P<tab>. Все то же самое, что и при задании клавиши F5, только вместо клавиши p для копирования используется клавиша P для перемещения файлов.
  • F7 - создание папки. :map <f7> :mkdir<space>. Обратите внимание, что здесь команда не завершается клавишей <cr>, т.е. Enter. Пользователь должен будет ввести имя создаваемой папки в нижней части окна (где вводится команда).
  • F8 - Удаление выбранных файлов. :map <f8> dd. Здесь все просто. Можно ещё аналогичное действие повесить на клавишу Delete - :map <delete> dd. Согласно документации клавишу Delete можно записывать как <del>, но у меня в версии vifm 0.9.1 сработало только с <delete>.

В vifm есть удобная команда, которая позволяет увидеть, какие комбинации клавиш, что делают. Например, команда :nmap (или её сокращённый вариант :nm) показывает окно со всеми комбинациями клавиш, которые работают в нормальном режиме, включая комбинации, добавленные пользователем.

Аналогично команда :cmap (или :cm) показывает список комбинаций клавиш в режиме ввода команд (после нажатия двоеточия), :qmap (или :qm) - в режиме просмотра, а :vmap (или :vm) - в визуальном режиме.

История команд

Во время работы vifm запоминает последние введённые команды, строки поиска, последние посещённые папки другие параметры. Это позволяет нам не набирать одну и ту же команду несколько раз, а нажать :, а затем стрелками вверх и вниз просматривать историю команд в поисках нужной команды. Однако по умолчанию вся эта история не сохраняются при выходе из vifm, и при следующем запуске мы не сможем увидеть, какие команды мы выполняли за предыдущий сеанс. Строго говоря, по умолчанию vifm при выходе сохраняет только закладки и метки. Но к счастью, мы можем указать vifm, что именно нужно сохранять при выходе из программы. Для этого предназначен параметр vifminfo, который имеет тип множества, элементы которого перечисляются через запятую.

Прежде чем менять этот параметр, посмотрим, чему он равен по умолчанию. Для этого выполним команду :set vifminfo. В качестве результата мы увидим:

Элемент множества bookmarks означает, что нужно сохранять метки, которые устанавливаются с помощью клавиши m, а элемент множества bmarks говорит о том, что нужно также сохранять именованные закладки, которые устанавливаются командой :bmark.

Ниже перечислены некоторые возможные элементы множества vifminfo (за полным списком элементов обращайтесь к документации):

  • bmarks - именованные закладки;
  • bookmarks - метки;
  • tui - состояние интерфейса (вид сортировки, активный вид и др.);
  • dhistory - история посещённых папок;
  • savedirs - флаг, обозначающий, что нужно сохранять последние посещённые папки (работает только если добавлен элемент множества параметр dhistory);
  • chistory - история введённых команд;
  • shistory - история поиска;
  • registers - состояние регистров (см. раздел про работу с файлами);
  • cs - текущая цветовая схема (о цветовых схемах будет говориться в следующем разделе).

Например, если мы хотим также сохранять состояние интерфейса, историю посещения папок, историю команд и поиска, то в файл vifmrc нужно добавить команду set vifminfo=bookmarks,bmarks,tui,savedirs,dhistory,chistory,shistory и перезапустить vifm.

Кстати, помните в прошлой части мы упоминали параметр history, когда разбирались с командой :set? Так вот параметр history как раз и определяет длину всех историй. По умолчанию он равен 15, но при желании величину истории можно поменять. Это логично делать в файле vifmrc, добавив в него, например, строку set history=100, чтобы увеличить размер всех историй до 100. По отдельности длины разных историй не регулируются.

Теперь немного углубимся в подробности того, где и как хранятся все эти истории. А хранятся они в текстовом файле с именем vifminfo, который расположен в папке настроек vifm, рядом с файлом vifmrc. Если заглянуть в файл vifminfo, то можно увидеть примерно следующий текст (разумеется, содержимое зависит от вашей работы с vifm):

# You can edit this file by hand, but it's recommended not to do that.

# Marks:
'b
        /home/jenyay/temp/vifm-test
        bin.txt
1520065899

# Bookmarks:
b/home/jenyay/Документы/Работа/
        work,doc
        1520403676
b/home/jenyay/Документы/
        doc
        1520403684
b/home/jenyay/projects/
        projects
        1520403701
b/home/jenyay/projects/soft/outwiker/
        projects
        1520403711

# Trash content:
t/home/jenyay/.local/share/vifm/Trash/000_foo.txt
        /home/jenyay/temp/vifm-test/foo.txt
t/home/jenyay/.local/share/vifm/Trash/000_outwiker
        /home/jenyay/temp/outwiker

Этот файл был создан vifm с настройкой vifminfo по умолчанию, что равносильно выполнению команды :set vifminfo=bookmarks,bmarks, то есть сохраняются только закладки и метки. Также сохранены ссылки на файлы в корзине (они сохраняются независимо от значения параметра vifminfo).

Давайте теперь сделаем так, чтобы сохранялись ещё строки поиска, для этого добавим в множество vifminfo новый элемент - shistory. Изменим файл vifmrc, чтобы он содержал следующую строку: set vifminfo=bookmarks,bmarks,shistory, после чего нужно перезапустить vifm.

Если теперь выполнить несколько раз поиск по различным фразам, то в файле vifminfo после завершения работы vifm можно будет увидеть новый раздел:

# Search history (oldest to newest):
/temp
/vifm
/outwiker

Аналогично хранятся и другие истории и параметры.

Есть некоторые особенности сохранения параметров и историй, о которых нужно помнить. В прошлой части мы говорили о том, что для того, чтобы изменения, сделанные в файле vifmrc, вступили в силу, нужно перезапустить программу vifm. Это верно, но не удобно каждый раз перезапускать программу при добавлении нового параметра в файл настроек, поэтому в vifm предусмотрена команда :restart, но пользоваться ей надо аккуратно. Дело в том, что эта команда не только заново читает файл vifmrc и vifminfo, но ещё предварительно сбрасывает многие параметры в значения по умолчанию, например, очищает истории и закладки. Если история и закладки уже сохранены в файле vifminfo, то она будет прочитана заново, но новые закладки и пункты истории при выполнении команды :restart не сохраняются в файл vifminfo. Обычно vifm обновляет содержимое файла vifminfo перед выходом из программы, но мы можем сказать vifm сбросить данные в vifminfo в любой момент, выполнив команду :write (или в сокращённом варианте просто :w). То есть, если вы хотите заново загрузить параметры из vifmrc с помощью команды :restart, то в большинстве случаев есть смысл перед этим выполнить команду :w.

Цветовые схемы

Мы рассмотрели уже немало команд, которые позволяют настраивать поведение vifm, а теперь давайте посмотрим, как можно влиять на внешний вид vifm, а точнее, как можно менять цветовую схему. Для того, чтобы поменять цветовую схему, выполните команду :colorscheme или в сокращённом виде :colo. После вызова этой команды появится окно со списком установленных в данный момент цветовых схем. Под Linux выбор не велик - по умолчанию устанавливается только одна тема Default, а под Windows "из коробки" ещё несколько дополнительных тем.

Разумеется, мы можем установить дополнительные темы. Например, более десяти тем можно найти в официальном репозитории от разработчиков vifm по адресу https://github.com/vifm/vifm-colors. Цветовые схемы имеют расширение .vifm и должны быть скопированы в папку colors внутри папки настроек vifm.

Вот как будет выглядеть меню цветовых схем, вызванное командой :colo после копирования файлов из указанного выше репозитория:

Выбрав другую цветовую схему, можно насладиться более красивыми цветами. Мне, например, нравится схема "desert":

Узнать имя цветовой схемы, установленной в данный момент, можно с помощью команды :colorscheme? или в сокращённом виде :colo?

Для постоянного использования цветовую схему можно установить двумя способами. Первый - добавить в файл vifmrc команду colorscheme имя_цветовой_схемы (или colo имя_цветовой_схемы).

Второй способ заключается в том, что текущую цветовую схему можно хранить в файле vifminfo, для этого параметр vifminfo должен включать в себя элемент множества cs, т.е. этот параметр может быть установлен в файле vifmrc, например, так: set vifminfo=bookmarks,bmarks,shistory,cs. Тогда при выходе из vifm или после выполнения команды :w в файл vifminfo будут добавлены строки наподобие следующих:

# Color scheme:
cdarkdesert

Заключение

vifm - очень интересный файловый менеджер, но, как и его идеологический прародитель (я имею в виду vi / vim), он требует некоторых усилий, чтобы с ним разобраться и настроить под себя. Ничего особо сложного в настройке нет, но нужно потратить пару вечеров, чтобы покопаться в настройках.

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

Проект vifm активно развивается, и новые версии выходят примерно раз в полгода, иногда - чаще, иногда - реже, и судя по коммитам в репозитории на github, процесс развития не останавливается.

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

А в завершение покажу свой файл настроек vifmrc. Когда вы будете читать эту статью, может быть в нем уже что-то изменится, поэтому я завёл для него репозиторий на github - https://github.com/Jenyay/vifmrc.

" Длина истории
set history=100

" Что сохранять в истории

set vifminfo=bookmarks,bmarks,tui,state,cs,savedirs,dhistory,chistory,shistory,phistory,registers

" По умолчанию использовать краткий вид

set lsview

" В кратком виде таблицу файлов заполнять по столбцам. Появилось в vifm 0.9.1.

set lsoptions=transposed

" Показывать статусную панель

set laststatus

" Что отображать на статусной панели

set statusline="%-35f%10E%20d%15A     |     Осталось места: %8a"

" Формат столбцов для подробного режима отображения файлов

set viewcolumns=-60%{name},20%{size},{mtime}

" Всегда показывать файлы, начинающиеся с точки

set dotfiles

" Во время поиска сразу перескакивать к первому найденному файлу

set incsearch

" При поиске игнорировать регистр символов

set ignorecase

" Сортировка по имени без учета регистра

set sort=+iname

" Стандартные клавиши, принятые со времени Norton Commander

map <f3> :!gvim -R %f &<cr>
map <f4> :!gvim %f &<cr>
map <f5> Y<tab>p<tab>
map <f6> Y<tab>P<tab>
map <f7> :mkdir<space>
map <f8> dd
map <s-f8> DD
map <delete> dd
map <f9> :shell<cr>

" Выделить и перейти к следующему файлу

map <space> tj

" Горячая клавиша для вызова меню с закладками

map <c-\> :bmarks<cr>

" Выбрать всё

map * ggVG<cr>

" Переход на уровень выше с помощью клавиши Backspace

map <bs> gh

" Установить текущую папку с другой панели

map <c-s> :cd %D<cr>

" Меню для работы с архивами

filetype *.zip,*.jar,*.war,*.ear
         \ {Mount with fuse-zip}
         \ FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR,
         \ {View contents}
         \ zip -sf %c | less,
         \ {Extract here}
         \ tar -xf %c,

" Нужно для подключения к SSH-серверам

filetype *.ssh FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR %FOREGROUND

Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.
5 stars

Рейтинг 4.9/5. Всего 48 голос(а, ов)



 03.09.2019 - 07:09

Спасибо за статьи -- читать одно удовольствие. Читал также твои труды по vimscript, пользуясь случаем, благодарю и за ту работу.

На сайт периодически захожу: ты завоевал меня как читателя :)

Я 17.10.2019 - 18:52

Накноец то нормальное руководство. Спасибо!

Иван 23.04.2020 - 21:39

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

ну и вообще статья отличная

Юджин 13.05.2020 - 22:11

В абзаце про команду cd явно что-то не то с описанием работы с противоположной панелью

Р.Столлман 27.06.2020 - 18:20

Про cd

Следовало писать, что команда `cd . %d` осуществляет переход противопололжной панели в директорию текущей

Андрей 03.09.2020 - 10:09

VIFM

Это было полезно. Я попробую использовать ViFm в своей работе

Михаил 16.12.2020 - 15:51

Спасибо за хороший вводный курс по работе с vifm. Кайфовая, это, оказывается, штука. Я вдохновился широтой ее возможностей)

Yggrim 13.02.2021 - 19:48

Спасибо за статью, читал с большим удовольствием.
Не подскажите как запускать vifm в полноэкранном режиме?


Подписаться на комментарии
Автор:
Тема:
 Ваш комментарий
 
 
Введите код 116