Поставил себе модную штуку и тут же нашел, что оптимизировать в моих настройках.
Опубликовано: 2024-12-02
Категория: OpenBSD
Теги: хауту openbsd neovim nvim telescope lua
Анализировал тут в очередной раз свои незамысловатые потребности в области редактирования текстовых файлов (подобный анализ в этой и смежных областях я люблю, могу и практикую регулярно). Нашел следующие паттерны, причиняющие мне определенное неудобство:
Ну а очертив таким образом текущие потребности и исходя из рационального, никогда не подводящего меня принципа "я не являюсь уникальной снежинкой и нитакусиком, всё, что я выдумал - уже приходило в голову сотням и тысячам людей до меня" - я, разумеется легко нагуглил этот ваш великий и ужасный telescope.nvim: плагин для Neovim, который из коробки умеет все перечисленное и еще многое, многое, МНОГОЕ-МНОГОЕ другое!
Про сам Telescope, его возможности, кастомизируемость и области потенциального применения - я тут распространяться не буду, ибо у меня нет лишнего года времени и трех-четырех клавиатур, которые можно стереть в процессе освещения этой бесконечной темы. Упомяну лишь, что нужные оному телескопу для работы утилиты ripgrep и fd присутствуют в пакетной базе OpenBSD и могут быть установлены, как обычно, через doas pkg_add ripgrep fd
. Ну а сам Telescope и его зависимости - см. по ссылке выше.
Я лучше о другом расскажу. Не так давно я писал, как добавил в Neovim функцию переключения раскладки на латиницу при выходе из режима вставки в командный режим, а при возвращении обратно в режим вставки, соответственно, функцию восстановления ранее использовавшейся раскладки. Штука эта до того удобная, что стала для меня уже чем-то самим собой разумеющимся - и именно поэтому мне поначалу показалось неудобным работать с Telescope.
=> про переключение раскладки при смене режимов в Neovim
Неудобство вот в чем: предположим, ввожу я текст на русском языке (да вот хоть бы этот) и выхожу из режима вставки в "нормальный" командный режим чтобы что-нибудь там поизучать через этот самый Telescope. При выходе у меня прикапывается специально мною разработанной методом копипейст-программирования функцией на lua русская раскладка - ведь я печатал по-русски?
И вот я топчу <leader>+ff
(в моем случае в качестве этой самой магической клавиши <leader>
я использую пробел:
-- use Space askey vim.g.mapleader = " " -- Telescope search hotkeys local builtin = require('telescope.builtin') vim.keymap.set('n', ' ff', builtin.find_files, { desc = 'Telescope find files' }) vim.keymap.set('n', ' fg', builtin.live_grep, { desc = 'Telescope live grep' }) vim.keymap.set('n', ' fb', builtin.buffers, { desc = 'Telescope buffers' }) vim.keymap.set('n', ' fh', builtin.help_tags, { desc = 'Telescope help tags' })
предо мной открывается всплывающее окно Telescope (ну, в терминологии neovim окно, конечно), где я по умолчанию нахожусь в строке ввода символов для поиска... в режиме ввода! А соответственно, упомянутая ранее lua-функция, обнаружив переход в режим ввода, восстановила последнюю использовавшуюся раскладку - русскую, которая мне в Telescope-то как раз нафиг и не сдалась.
Это нужно исправить, заодно доказав, что даже презренный гуманитарий способен писать пусть говнокод, но таки рабочий говнокод на языке lua. Итак, вот доработанный файл myxkbswitch.lua
: манипуляции с сохранением/восстановлением раскладки НЕ применяются теперь для окна Telescope, но остаются работоспособными для прочих окон:
local M = {} -- nvim_create_autocmd shortcut local autocmd = vim.api.nvim_create_autocmd -- needs "xkb-switch" or "xkb-switch-i3" app to be installed local xkb_switch_lib = '/usr/local/lib/libxkbswitch.so' -- get current layout local function get_current_layout() return vim.fn.libcall(xkb_switch_lib, 'Xkb_Switch_getXkbLayout', '') end -- get the "filetype" option for active buffer local function get_current_filetype() return vim.api.nvim_buf_get_option(0, "filetype") end -- for first use after nvim has been started local saved_layout = get_current_layout() function M.setup() -- When leaving Insert Mode: -- 1. Save the current layout (but NOT for Telescope menu) -- 2. Switch to the US layout autocmd( 'InsertLeave', { pattern = "*", callback = function() vim.schedule(function() current_filetype = get_current_filetype() if current_filetype ~= 'TelescopePrompt' then saved_layout = get_current_layout() end vim.fn.libcall(xkb_switch_lib, 'Xkb_Switch_setXkbLayout', 'us') end) end } ) -- When entering Insert Mode: -- 1. Switch to the previously saved layout (if it is NOT Telescope window!) autocmd( 'InsertEnter', { pattern = "*", callback = function() vim.schedule(function() current_filetype = get_current_filetype() if current_filetype ~= 'TelescopePrompt' then vim.fn.libcall(xkb_switch_lib, 'Xkb_Switch_setXkbLayout', saved_layout) end end) end } ) end return M
И оно даже работает как нужно. Ну, если не забыть вписать require('myxkbswitch').setup()
куда-нибудь в init.lua.
P.S. А чтобы Telescope искал по скрытым файлам (по умолчанию не ищет) в тот же init.lua можно прописать вот это:
-- Telescope options require('telescope').setup { pickers = { find_files = { hidden = true -- show hidden files while file search } } }
P.P.S. Чтоб два раза не вставать: заодно сделал еще одно микроулучшение своего юзер ыкспириенса: я время от времени пользуюсь терминалом прямо внутри текстового редактора (открываю командой :term
, хоткея не назначал в силу редкости использования) и давно хотел сделать так, чтобы а) терминал открывался сразу в режиме ввода (дефолтное поведение не такое - нужно сначала нажатием i войти в режим ввода), и б) чтобы в терминале не применялась проверка орфографии (а по умолчанию она там за каким-то фигом применяется если включено для всего редактора). Короче, это делается так:
vim.api.nvim_create_autocmd({ "BufWinEnter", "WinEnter", "TermOpen" }, { pattern = "term://*", callback = function() vim.cmd.startinsert() vim.cmd.setlocal "nospell" end, })
text/gemini;
This content has been proxied by September (3851b).