nnn (Русский)

From ArchWiki

Состояние перевода: На этой странице представлен перевод статьи nnn. Дата последней синхронизации: 14 октября 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

nnn (стилизованно: n3) это компактный файловый менеджер для терминала, написанный на Си. Является очень гибким за счёт своей системы плагинов, которая абстрагирована от языка, например, плагин (neo)vim.

nnn имеет встроенную функцию (раз)архивирования широко распространённых форматов, функцию анализа использования диска, средство нечёткого запуска приложений (неполное или чуть неправильно написанное имя) и средство множественного переименования. nnn поддерживает быстрый поиск search-as-you-type с регексом и навигацию navigate-as-you-type с непрерывной навигацией и авто-выделением. Кроме того поддерживаются контексты, закладки, сложные условия сортировки, SSHFS, множественные операции над выделенными объектами и другое.

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

Установка

nnn распространяется как пакет nnn.

Использование

nnn управляется не только как vim при помощи hjkl, но и при помощи стрелок. Для удобного использования (в отличие от vim) достаточно стрелок, / и q. Смотри справку через ? в любой момент.

Конфигурация

nnn конфигурируется через переменные окружения, обычно добавляемые в файл ~/.bashrc. Дополнительную информацию о конфигурировании можно прочесть как в nnn(1), так и на вики в GitHub.

Вот пример конфигурации ~/.bashrc:

~/.bashrc
export NNN_BMS='d:~/Documents;u:/home/user/Cam Uploads;D:~/Downloads/'
export NNN_SSHFS="sshfs -o follow_symlinks" # заставляет sshfs следовать по символьным ссылкам
export NNN_COLORS="2136"                    # разные цвета для разных контекстов (см. man)
export NNN_TRASH=1                          # перемещение в корзину вместо удаления файлов (требуется trash-cli)
Примечание: Если запускаете nnn при помощи nnn.desktop из среды рабочего стола, он может не подхватить настройку из .bashrc. В таком случае, смотри статью desktop integration на вики в GitHub.

Самая полезная настройка из всех это NNN_BMS. Она позволяет выбрать горячие клавиши для указанных каталогов. Перемещение в директорию происходит по нажатию на b с выбранной буквой закладки. В примере выше требуется нажать клавиши bD, чтобы переместиться в каталог ~/Downloads.

Советы и рекомендации

Список выделенных файлов

Получить список выделенных файлов можно при помощи псевдонимов. Создайте такой псевдоним:

~/.bashrc
alias ncp="cat ${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection} | tr '\0' '\n'"

Теперь можно использовать ncp для получения списка выделенных файлов и его передачи в другие программы через пайп.

Указание уровня вложенности оболочки

Когда используется ! чтобы открыть командную оболочку в текущей директории (не запутайтесь в оболочках, которые запустили nnn, и которые запущенны из nnn) можно добавить такую строку, чтобы не запутаться:

~/.bashrc
[ -n "$NNNLVL" ] && PS1="N$NNNLVL $PS1"

Настройка добавляет N<уровень вложенности> перед каждым приглашением bash.

Выход и cd (Ctrl-G)

Обычно, когда выходите из nnn, вас переносит в директорию, из которой запустили менеджер, однако если настроить cd-on-quit, то при выходе оболочка уже будет находится в последней выбранной в nnn директории.

Для настройки добавьте в ваш .bashrc/.zshrc:

~/.bashrc или ~/.zshrc
if [ -f /usr/share/nnn/quitcd/quitcd.bash_zsh ]; then
    source /usr/share/nnn/quitcd/quitcd.bash_zsh
fi

Подключённый скрипт создаст команду n (точнее, bash-функцию n) — используйте её вместо команды nnn.

Смотрите также статью configure cd on quit на вики в GitHub.

Добавление плагинов

Чтобы добавить плагин, следует добавить файл плагина в ${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins/. Например, можно создать свой запускаемый шелл-скрипт

${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins/git-changes
#!/usr/bin/env sh
 git log -p -- "$@"

Скрипт срабатывает по нажатии клавиши R и выбору git-changes, который покажет удобный журнал изменений git репозитория для конкретного файла вместе с кодом для удобного код-ревью.

Смотрите также