Gered
c4b95a906d
prevents odd and slightly annoying situation when ':q' is used and the file tree was open. if quitting the last non-file-tree window, you then get left with a full-screen file tree instead of quitting neovim. this fixes that.
98 lines
4.3 KiB
Lua
98 lines
4.3 KiB
Lua
-- [[ Basic Autocommands ]]
|
|
-- See `:help lua-guide-autocommands`
|
|
|
|
local helper = require 'helper'
|
|
|
|
-- Highlight when yanking (copying) text
|
|
-- Try it with `yap` in normal mode
|
|
-- See `:help vim.highlight.on_yank()`
|
|
vim.api.nvim_create_autocmd('TextYankPost', {
|
|
desc = 'Highlight when yanking (copying) text',
|
|
group = vim.api.nvim_create_augroup('kickstart-highlight-yank', { clear = true }),
|
|
callback = function()
|
|
vim.highlight.on_yank()
|
|
end,
|
|
})
|
|
|
|
-- Dynamically add Cargo / CMake project/file keymaps to a buffer when that buffer
|
|
-- is found to be part of a Cargo / CMake project.
|
|
vim.api.nvim_create_autocmd('BufEnter', {
|
|
group = vim.api.nvim_create_augroup('gered-bufenter-project-keymaps', { clear = true }),
|
|
callback = function()
|
|
local bufnr = vim.api.nvim_get_current_buf()
|
|
|
|
local function map(mode, lhs, rhs, opts)
|
|
opts = opts or {}
|
|
opts.buffer = bufnr
|
|
vim.keymap.set(mode, lhs, rhs, opts)
|
|
end
|
|
|
|
if helper.in_cargo_project() then
|
|
map('n', '<leader>ra', '<Cmd>RustLsp codeAction<CR>', { desc = 'Rust: Code [A]ction' })
|
|
map('n', '<leader>rr', '<Cmd>RustLsp! runnables<CR>', { desc = 'Rust: [R]un Last Target' })
|
|
map('n', '<leader>rR', '<Cmd>RustLsp runnables<CR>', { desc = 'Rust: [R]unnables' })
|
|
map('n', '<leader>rd', '<Cmd>RustLsp! debuggables<CR>', { desc = 'Rust: [D]ebug Last Target' })
|
|
map('n', '<leader>rD', '<Cmd>RustLsp debuggables<CR>', { desc = 'Rust: [D]ebuggables' })
|
|
map('n', '<leader>rt', '<Cmd>RustLsp testables<CR>', { desc = 'Rust: [T]estables' })
|
|
map('n', '<leader>re', '<Cmd>RustLsp explainError<CR>', { desc = 'Rust: [E]xplain Error' })
|
|
map('n', '<leader>ri', '<Cmd>RustLsp renderDiagnostic<CR>', { desc = 'Rust: Show Next D[i]agnostic' })
|
|
map('n', '<leader>ro', '<Cmd>RustLsp openCargo<CR>', { desc = 'Rust: [O]pen Cargo.toml' })
|
|
map('n', '<leader>rl', '<Cmd>RustLsp reloadWorkspace<CR>', { desc = 'Rust: Re[l]oad Workspace' })
|
|
end
|
|
|
|
if helper.in_cmake_project() then
|
|
map('n', '<leader>cc', '<Cmd>CMakeClean<CR>', { desc = 'CMake: [C]lean' })
|
|
map('n', '<leader>cg', '<Cmd>CMakeGenerate<CR>', { desc = 'CMake: [G]enerate' })
|
|
map('n', '<leader>cr', '<Cmd>CMakeRun<CR>', { desc = 'CMake: [R]un' })
|
|
map('n', '<leader>cd', '<Cmd>CMakeDebug<CR>', { desc = 'CMake: [D]ebug' })
|
|
map('n', '<leader>cb', '<Cmd>CMakeBuild<CR>', { desc = 'CMake: [B]uild' })
|
|
map('n', '<leader>cB', '<Cmd>CMakeSelectBuildTarget<CR>', { desc = 'CMake: Select [B]uild Target' })
|
|
map('n', '<leader>cp', '<Cmd>CMakeSelectBuildType<CR>', { desc = 'CMake: Select Build Ty[p]e' })
|
|
map('n', '<leader>cl', '<Cmd>CMakeSelectLaunchTarget<CR>', { desc = 'CMake: Select [L]aunch Target' })
|
|
map('n', '<leader>cS', '<Cmd>CMakeSettings<CR>', { desc = 'CMake: Project [S]ettings' })
|
|
map('n', '<leader>cs', '<Cmd>CMakeTargetSettings<CR>', { desc = 'CMake: Target [S]ettings' })
|
|
end
|
|
end,
|
|
})
|
|
|
|
-- Borrowed from nvim-tree wiki recipe:
|
|
-- https://github.com/nvim-tree/nvim-tree.lua/wiki/Recipes#make-q-and-bd-work-as-if-tree-was-not-visible
|
|
-- Make :bd and :q behave as usual when tree is visible
|
|
vim.api.nvim_create_autocmd({ 'BufEnter', 'QuitPre' }, {
|
|
nested = false,
|
|
group = vim.api.nvim_create_augroup('gered-bufenter-quitpre-nvim-tree', { clear = true }),
|
|
callback = function(e)
|
|
local tree = require('nvim-tree.api').tree
|
|
|
|
-- Nothing to do if tree is not opened
|
|
if not tree.is_visible() then
|
|
return
|
|
end
|
|
|
|
-- How many focusable windows do we have? (excluding e.g. incline status window)
|
|
local winCount = 0
|
|
for _, winId in ipairs(vim.api.nvim_list_wins()) do
|
|
if vim.api.nvim_win_get_config(winId).focusable then
|
|
winCount = winCount + 1
|
|
end
|
|
end
|
|
|
|
-- We want to quit and only one window besides tree is left
|
|
if e.event == 'QuitPre' and winCount == 2 then
|
|
vim.api.nvim_cmd({ cmd = 'qall' }, {})
|
|
end
|
|
|
|
-- :bd was probably issued an only tree window is left
|
|
-- Behave as if tree was closed (see `:h :bd`)
|
|
if e.event == 'BufEnter' and winCount == 1 then
|
|
-- Required to avoid "Vim:E444: Cannot close last window"
|
|
vim.defer_fn(function()
|
|
-- close nvim-tree: will go to the last buffer used before closing
|
|
tree.toggle { find_file = true, focus = true }
|
|
-- re-open nivm-tree
|
|
tree.toggle { find_file = true, focus = false }
|
|
end, 10)
|
|
end
|
|
end,
|
|
})
|