null

Продолжаем улучшать нашу наколеночную IDE!

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

  1. хочется уметь копировать из системы в nvim и, что главное, из nvim в систему;
  2. хочется уметь быстро переключаться между проектами, и желательно это делать в одном окне;
  3. хочется иметь эту консоль быстрого доступа внизу экрана, свойственную всем класическим IDE.

И если первые два пункта +/- являются универсальными потребностями, то последняя - сугубо моя хотелка :) Приступим же!

 

Буфер обмена

 

На самом деле nvim и так умеет в это дело - чтобы скопировать в системный буфер, нужно воспользоваться командами "*y или "+y, помещающими содержимое выделенной области текста в специальные регистры * и + - в зависимости от системы один из них должен совпадать с буфером обмена. Но использовать эти команды крайне неудобно. Поэтому давайте добавим для них маппинги:

vim.keymap.set("n", "<leader>y", "\"+y")
vim.keymap.set("v", "<leader>y", "\"+y")

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

vim.keymap.set("n", "<leader>y", "\"+y\"*y")

Ура, проблема оказалась не проблемой! Едем дальше...

 

Переключение между проектами

 

Здась уже сложнее. В nvim нет такого понятия как сессия - соответственно чтобы перейти в новый проект необходимо выйти из nvim, перейти в нужную директорию и снова открыть nvim (по крайней мере если мы хотим, чтобы директория, в которую мы перейдем, считалась новым проектом и в ней работали все наши замечательные фишечки типа поиска по файлам). Это совсем не круто! Хочется уметь переключиться из одного проекта в другой не просто не выходя из nvim, но и в идеале сохранив текущее состояние. Можно конечно открывать под каждый проект отдельное окно терминала, но мы воспользуемся tmux - терминальным мультиплексором, который позволяет по сути смержить их в одно.

Надеюсь с установкой tmux у читателя проблем не возникнет. После успешной его установки необходимо написать небольшой скриптик, который позволит нам создавать новую сессию сразу в нужной нам директории, после чего мы будем дергать этот скриптик из nvim и все будет в шоколаде! Честным словом будет "стащим" уже готовое с просторов интернета:

#!/usr/bin/env bash

if [[ $# -eq 1 ]]; then
    selected=$1
else
    selected=$(find ~/repositories -mindepth 1 -maxdepth 2 -type d | fzf)
fi

if [[ -z $selected ]]; then
    exit 0
fi

selected_name=$(basename "$selected" | tr . _)
tmux_running=$(pgrep tmux)

if [[ -z $TMUX ]] && [[ -z $tmux_running ]]; then
    tmux new-session -s $selected_name -c $selected
    exit 0
fi

if ! tmux has-session -t=$selected_name 2> /dev/null; then
    tmux new-session -ds $selected_name -c $selected
fi

tmux switch-client -t $selected_name

Обратите внимание на 6 сточку: вместо ~/repositories можно указать свою директорию, в которой будем искать проекты, а параметры справа позволяют регулировать глубину рекурсии.

Чтобы удобно этот скриптик использовать, положим его в ~/.local/bin/.

Теперь прямо из tmux можно вызвать его и получить следующий результат:

Туть можно осуществлять поиск по ключевым словам :)

Ну и последний этап сего приключения - впендюрить его в nvim. Добавим маппинг:

vim.keymap.set("n", "<C-f>", "<cmd>silent !tmux neww script_name<CR>")

По нажатию клавиш Ctrl + F у нас прямо в окне nvim откроется интерфейс со скриншота выше, где можно будет найти интересующий нас проект, и перейти в него. При этом этот новый проект откроется в новой сессии, поэтому если мы оттуда вернемся обратно - мы вернемся к тому же состоянию nvim, из которого мы уходили! Даже курсор останется на той же строчке открытого файла)

 

Терминал снизу

 

Ну а это мы по сути получаем бесплатно. Мало того, что в nvim можно использовать команду :terminal, открывающую терминал прямо в выбранной панели, что позволяет просто разместить одну из панелей внизу экрана и радоваться, так еще и tmux позволяет сделать то же самое комбинацией клавиш (<Ctrl + B> + ") (Сначала Ctrl + B, затем ") и получить еще и более стабильный вариант этого терминала (тот, что интегрирован в nvim, иногда может выдавать всякие интересности типа краша всего nvim целиком). 

 

Конец

 

Заключения не будет, лень писать. 

Вперед