Итак, прошел мой первый месяц использования Neovim в качестве основного текстового редактора для написания кода. И за этот месяц я наткнулся сразу на несколько проблем, которые захотелось решить:
- хочется уметь копировать из системы в nvim и, что главное, из nvim в систему;
- хочется уметь быстро переключаться между проектами, и желательно это делать в одном окне;
- хочется иметь эту консоль быстрого доступа внизу экрана, свойственную всем класическим 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 целиком).
Конец
Заключения не будет, лень писать.