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

Немного рекламы

Содержание

Введение

Я очень люблю пробовать новые двухпанельные файловые менеджеры (в стиле Norton Commander или Total Commander). Если под Windows я нашёл практически идеальную для себя программу - MultiCommander, которым пользуюсь уже несколько лет, то под Linux в каждом файловом менеджере что-то не устраивает, и здесь я поочерёдно использую Krusader (но он слишком медленный) и Double Commander (но он часто падает, и работа с FTP в Krusader мне нравится больше). А поскольку под Linux я много времени провожу в консоли, то время от времени запускаю Midnight Commander (он же mc). Midnight Commander по скорости заметно обгоняет и Double Commander, и особенно Krusader, но при работе с ним остаётся ощущение, что чего-то не хватает (возможно, я что-то в нем ещё не разглядел).

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

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

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

Установка

Несмотря на то, что я в основном буду писать про работу с vifm под Linux, но vifm является кроссплатформенной программой, которая работает и под Windows. Скачать версию под Windows можно с сайта программы. Установка программы под Windows заключается только в распаковке архива.

Самый простой способ установить vifm в Ubuntu - это выполнить команду

sudo apt install vifm

Но на момент написания этой статьи в репозиториях Ubuntu лежит vifm версии 0.9.0, а в данный момент последней версией является 0.9.1, причём в версии 0.9.1 появилось несколько полезных возможностей и исправлений, о чем я скажу. Если вы хотите использовать последнюю версию vifm, то вам нужно скачать исходники программы со страницы загрузки или из репозитория github (программа написана на языке C), распаковать их, а затем скомпилировать с помощью команд:

./configure
make

Если все пройдёт нормально (лично у меня компиляция не вызвала никаких затруднений), то можно установить vifm в систему с помощью команды:

sudo make install

Предварительно удалите установленную vifm, если она была установлена с помощью команд apt или apt-get. Чтобы не было недоразумений, надо сказать, что vifm - это самостоятельный проект, который копирует некоторое поведение vim, а не плагин для vim.

Первый запуск

Когда вы в первый раз выполните в консоли команду vifm (или под Windows запустите файл vifm.exe), то увидите подобную (может быть не очень впечатляющую картину):

Если в Midnight Commander сразу видно меню, какие-то настройки, подсказки и тому подобное, то в vifm мы видим только две панели с файлами и больше ничего. Но по опыту работы с vim мы уже знаем, что эта простота обманчива. В данный момент мы можем перемещаться по дереву каталогов с помощью клавиш со стрелками, а любители vim вместо стрелок могут использовать клавиши h, j, k, l. В данном режиме клавиша j будем перемещать курсор вниз, k - вверх, l будет работать как аналог Enter и входить в каталог, а h - выходить из текущего каталога в родительский.

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

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

Пользователи vim знают, что для перехода в режим командной строки (command line mode) нужно нажать клавишу :. В vifm эта клавиша работает точно так же. Нажав, : под панелями с файлами появится знак двоеточия, и туда будет установлен курсор:

Теперь мы можем набирать команды. Первое, чему нужно научиться в vifm (как и в vim), это выходить из программы. Для этого предназначена команда :quit или просто :q

Введя эту команду, и нажав Enter, мы выйдем из vifm. Если вы передумали вводить команду и хотите вернуться из режима командной строки в нормальный режим, нажмите Esc.

Копирование, перенос и переименование файлов

Опять запустим vifm и посмотрим, как мы можем работать с файлами в этой программе (копировать, удалять и переименовывать их). Пока мы будем пользоваться теми возможностями, которые предоставляет vifm по умолчанию, а в следующей статье мы настроим vifm так, чтобы можно было использовать клавиши F3 - F8 так, как это принято в классических файловых менеджерах (в стиле Norton Commander).

Сначала разберёмся, как копировать файлы в vifm. Работа с файлами очень напоминает работу со строками в vim, то есть вы выделяете один или несколько файлов (как выделить несколько файлов, мы увидим чуть позже), а затем нажимаете клавишу Y (Shift+y), от английского слова yank, после выполнения этой команды, vifm сохранит ссылку на выбранный файл или файлы во внутреннем регистре (строго говоря, в регистре с именем ""). После этого можно перейти в другую папку, нажать клавишу p, и файл будет скопирован в текущую папку. Если нажать P, то файл будет перенесён.

Если vim умеет сохранять строки в разные именованные регистры, то vifm аналогично может сохранять ссылки на файлы в разные регистры. Регистры имеют имена с "a по "z и ещё есть некоторые специальные имена, например, тот самый "", который мы только что использовали.

Чтобы скопировать файл и или файлы, например, в регистр "r, то мы должны нажать комбинацию "rY. Чтобы затем скопировать файлы из этого же регистра в другую папку, нужно нажать "rp (для переноса файлов - "rP).

Мы можем посмотреть, какие файлы содержатся в каких регистрах, для этого в режиме командной строки (в который мы попадаем, когда нажимаем клавишу :) нужно выполнить команду :registers или её сокращённый вариант - :reg.

Например, на следующем скриншоте, сделанном после выполнения команды :reg, видно, что содержится в регистре "", а что в "r:

Для переименования файлов предназначены две команды в нормальном режиме: cw и cW, а также команда :rename. Если выбрать файл и нажать комбинацию клавиш cw, то в нижней части окна будет предложено ввести новое имя для файла.

Если же нажать cW, то будет предложено поменять только имя файла без расширения.

Если выбрать файл и ввести команду :rename, то откроется редактор по умолчанию (в моем случае - vim), в котором будут перечислены выбранные файлы, их имена можно будет поменять, и после выхода из редактора с сохранением соответствующие файлы будут переименованы. Это достаточно удобный способ массового переименования файлов.

Удаление файлов и корзина

Чтобы удалить файл, нужно его выбрать и нажать dd в нормальном режиме (vifm спросит подтверждение на удаление). На самом деле файл не просто удаляется, а удаляется в корзину, причём корзина в vifm своя, независимая от операционной системы. При удалении файла с помощью команды dd, в регистр "" попадает ссылка на удалённый файл, и заодно мы можем посмотреть, где же находится корзина:

Под Windows папка корзины с именем .vifm-Trash по умолчанию создаётся в корне диска, на котором установлен vifm. У меня, например, папка корзины имеет адрес D:\.vifm-Trash. Vifm позволяет менять расположение корзины.

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

При удалении файлов можно указать, в какой регистр должна быть помещена ссылка на удалённый файл (по аналогии с копированием файлов). Например, если выбрать файл и в нормальном режиме нажать последовательность клавиш "add, то файл будет удалён (после подтверждения пользователем), а ссылка на удалённый файл будет помещена не только в регистр "", но и в регистр "a:

Если вы хотите удалить файл, минуя корзину, то в нормальном режиме нажмите комбинацию DD.

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

Чтобы восстановить удалённый файл, выберите его и нажмите клавишу r. Чтобы удалить файл из корзины, нажмите dd. Чтобы покинуть режим просмотра корзины, нажмите Esc, или Enter, или q.

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

Если выбрать папку-корзину и нажать Enter, то мы окажемся в этой папке:

Чтобы восстановить удалённый файл, нужно его выбрать и выполнить команду :restore. Файл исчезнет из корзины и окажется там, где он был изначально. Эта команда работает только в папке-корзине.

Для очистки корзины предназначена команда :empty.

Выделение файлов и групповые операции

Vifm поддерживает множество возможностей для выделения нескольких файлов, мы рассмотрим только два из них. Самый простой из них - это в нормальном режиме нажать клавишу t, тогда выбранный в данный момент файл будет выделен. Другой способ - это использование визуального режима, вход в который осуществляется с помощью команд v или V. В визуальном режиме перемещение по списку файлов сразу выделяет файлы. Выход из визуального режима с помощью клавиши Enter сохраняет выделение, а с помощью клавиши Esc отменяет его.

На следующих скриншотах выделены файлы bar.txt и foo.txt:

Чтобы очистить выделение, используется клавиша Esc.

Если у нас выделено несколько файлов, то описанные выше команды для удаления файлов (dd) и копирования (Y вместе с p или P) соответственно удалят или скопируют / перенесут несколько файлов, тут нет ничего особенного. Интереснее работает переименование. При использовании команды cw откроется редактор с полными именами файлов, как при вызове команды :rename. Команда cW (изменение имени файла без расширения) игнорирует выделения файлов и всегда работает только с тем файлом, на котором стоит курсор.

Изменение параметров

Теперь перейдём к настройке vifm. Этот файловый менеджер предоставляет огромное количество параметров, с помощью которых можно изменять внешний вид vifm на свой вкус и настраивать его поведение под себя. Для установки параметров используется команда :set (есть ещё команды :setlocal, которая применяет параметры только для текущей папки, а когда мы переходим в другую папку, эти параметры отменяются, и :setglobal, но о ней мы не будем говорить).

Чтобы увидеть все параметры, действующие в данный момент, введите команду :set all. В результате будет выведен длинный список параметров.

Для выхода из этого списка можно использовать клавиши Esc, Enter или q.

Если мы хотим увидеть только параметры, значения которых отличаются от значений по умолчанию, то достаточно выполнить команду :set без параметров. В данный момент мы ещё не меняли никакие параметры, но в число параметров входят также ширина и высота консоли, где выполняется vifm (параметры columns и lines соответственно), эти параметры у нас должны отобразиться:

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

Формат команды :set следующий:

:se[t] opt1=val1 opt2='val2' opt3="val3" ...

запись :se[t] обозначает, что букву t набирать не обязательно, и команду :set везде можно заменить на :se. Это сократит количество набираемых символов, но ухудшит читаемость, если параметры будут задаваться в файле конфигурации (о нем мы скоро поговорим). Значение параметров можно набирать без кавычек, в одинарных кавычках или в двойных кавычках независимо от типа параметра.

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

По умолчанию длина истории равна 15. Чтобы изменить это значение, например, до 100, мы можем выполнить любую из следующих команд: :set history=100, или :set history='100', или :set history="100". Чтобы сбросить значение параметра к значению по умолчанию, мы можем написать :set history&.

Также мы можем использовать операторы += и -= для увеличения и уменьшения параметра соответственно. Например, если мы хотим увеличить размер истории на 20, мы можем выполнить команду :set history+=20, а для уменьшения размера истории на ту же величину - :set history-=20.

Те же самые операции работают со строковыми значениями и множествами (со множествами мы разберёмся на примере чуть позже).

Немного по-другому работают булевы параметры. Рассмотрим их использование на примере параметра dotfiles. Как известно, в Linux файлы и папки, имена которых начинаются с точки, считаются скрытыми или служебными. Поэтому vifm по умолчанию не отображает их на панелях. Чтобы их увидеть, нужно включить параметр dotfiles. Для этого нужно выполнить команду :set dotfiles. Таким образом мы устанавливаем значение булевому параметру истинное значение, обратите внимание, что при аналогичной записи команды для параметра другого типа vifm отобразил бы значение параметра, как было сказано выше. Чтобы убедиться, что параметр dotfiles установлен, вызовем команду :set без параметров для отображения всех изменённых параметров. В результате увидим следующий список:

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

Если бы параметр dotfiles не был бы установлен, то внизу было бы выведено слово nodotfiles. Это слово даёт нам подсказку относительно того, как мы можем отключить параметр булева типа - нужно ввести команду :set nodotfiles. Таким образом, любой булев параметр устанавливается командой :set имя_параметра, а отключается командой :set noимя_параметра.

Отключим параметр dotfiles с помощью команды :set nodotfiles и убедимся в этом, выполнив команду :set dotfiles?. В нижней части окна будет выведена строка:

Если мы хотим не просто установить или сбросить какой-то параметр, а хотим его инвертировать, то мы должны вызвать команду вида :set invимя_параметра или, что то же самое, :set имя_параметра!, т.е. в нашем случае мы должны вызвать команду :set invdotfiles или :set dotfiles!.

Сохранение параметров

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

При первом запуске vifm под Linux будет создана папка ~/.config/vifm, в которой располагаются разные файлы конфигураций, но самый главный файл конфигураций - файл с именем vifmrc почему-то не создаётся, его надо создать самостоятельно, это должен быть обычный текстовый файл. Когда вы его создадите, нужно перезапустить vifm. Описанное поведение относится к vifm 0.9.1, однако в vifm 0.9.0 у меня автоматически не создавалась папка ~/.config/vifm, и её приходилось тоже создавать вручную.

Если вы создадите папку ~/.vifm (в домашней папке пользователя), то именно она будет использоваться для хранения настроек, но чтобы не захламлять домашнюю папку, лучше все-таки использовать ~/.config/vifm или путь $XDG_CONFIG_HOME/vifm, если переменная окружения $XDG_CONFIG_HOME установлена. В документации вы можете найти полный список путей, где vifm ищет конфигурационные файлы. Есть возможность указать путь до папки конфигурации с помощью переменной окружения $VIFM.

Когда вы запускаете vifm, то внутри программы создаются различные переменные, в том числе $VIFM, которая содержит путь до текущей папки конфигурации и $MYVIFMRC, которая содержит путь до файла vifmrc, если он существует. Если файла vifmrc нет, то переменная $MYVIFMRC не создаётся.

Чтобы увидеть путь до используемой в данный момент папки конфигурации, в vifm можно воспользоваться командой :echo $VIFM. После её запуска в нижней части окна окна будет показан путь до папки конфигурации.

Если в папке конфигурации создать файл vifmrc и перезапустить vifm, то в переменной $MYVIFMRC будет храниться путь до этого файла. Убедиться в этом можно, выполнив команду :echo $MYVIFMRC.

Переменная $MYVIFMRC может пригодиться, например, для того, чтобы открыть редактор файла конфигурации vifmrc непосредственно из vifm. Для этого нужно выполнить команду :edit $MYVIFMRC или в сокращённом виде :e $MYVIFMRC. В результате выполнения этой команды запустится текстовый редактор с открытым файлом vifmrc.

В файл конфигурации vifmrc можно записывать последовательность команд из командного режима (те, что начинаются с :), но при этом символ : писать не обязательно. Каждая такая команда должна располагаться на отдельной строке. Если строка начинается с символа двойной кавычки ("), то такая строка игнорируется, и за двойной кавычкой может располагаться комментарий.

Файл vifmrc должен быть сохранен в кодировке UTF-8. Это актуально, если где-то придётся использовать русские буквы.

Например, если мы хотим установить параметры history и dotfiles, которые мы уже обсуждали выше, то файл vifmrc должен содержать следующие строки:

set history=100
set dotfiles

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

После исправления файла vifmrc, чтобы изменения вступили в силу, нужно либо перезапустить vifm, либо выполнить команду :restart, которая заново загрузит файл vifmrc, но у команды :restart есть некоторые особенности. Если коротко, то при вызове команды :restart не сохраняются истории вызова команд, поиска и другие истории текущего сеанса работы. Чтобы сохранить их, перед вызовом команды :restart вызовите команду :write или просто :w. Более подробно о хранении истории будет сказано в следующей статье.

Заключение

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

Немного рекламы

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

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



 21.09.2018 - 19:08

Отлично!

Хорошие статьи для того, чтобы начать работать с vifm.


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