first commit
This commit is contained in:
commit
fae14b0025
3 changed files with 400 additions and 0 deletions
360
init.lua
Normal file
360
init.lua
Normal file
|
|
@ -0,0 +1,360 @@
|
|||
local ensure_packer = function()
|
||||
local fn = vim.fn
|
||||
local install_path = fn.stdpath("data") .. "/site/pack/packer/start/packer.nvim"
|
||||
if fn.empty(fn.glob(install_path)) > 0 then
|
||||
fn.system({ "git", "clone", "--depth", "1", "https://github.com/wbthomason/packer.nvim", install_path })
|
||||
vim.cmd([[packadd packer.nvim]])
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local packer_bootstrap = ensure_packer()
|
||||
|
||||
require("packer").init({
|
||||
autoremove = true,
|
||||
})
|
||||
|
||||
require("packer").startup(function(use)
|
||||
-- Packer can manage itself
|
||||
use("wbthomason/packer.nvim")
|
||||
|
||||
use("lewis6991/fileline.nvim")
|
||||
|
||||
use {
|
||||
'stevearc/stickybuf.nvim',
|
||||
config = function() require('stickybuf').setup() end
|
||||
}
|
||||
|
||||
-- use {"akinsho/toggleterm.nvim", tag = '*', config = function()
|
||||
-- require("toggleterm").setup()
|
||||
-- end}
|
||||
|
||||
use 'famiu/bufdelete.nvim'
|
||||
|
||||
use("neovim/nvim-lspconfig")
|
||||
use('jose-elias-alvarez/null-ls.nvim')
|
||||
|
||||
use { 'TimUntersberger/neogit', requires = 'nvim-lua/plenary.nvim' }
|
||||
|
||||
use("tiagovla/scope.nvim")
|
||||
|
||||
use({
|
||||
"folke/which-key.nvim",
|
||||
config = function()
|
||||
vim.o.timeout = true
|
||||
vim.o.timeoutlen = 300
|
||||
require("which-key").setup({
|
||||
-- your configuration comes here
|
||||
-- or leave it empty to use the default settings
|
||||
-- refer to the configuration section below
|
||||
})
|
||||
end,
|
||||
})
|
||||
|
||||
use({
|
||||
"folke/trouble.nvim",
|
||||
requires = "nvim-tree/nvim-web-devicons",
|
||||
config = function()
|
||||
require("trouble").setup({
|
||||
auto_open = true
|
||||
-- your configuration comes here
|
||||
-- or leave it empty to use the default settings
|
||||
-- refer to the configuration section below
|
||||
})
|
||||
end,
|
||||
})
|
||||
|
||||
-- Collection of common configurations for the Nvim LSP client
|
||||
-- Visualize lsp progress
|
||||
use({
|
||||
"j-hui/fidget.nvim",
|
||||
config = function()
|
||||
require("fidget").setup()
|
||||
end,
|
||||
})
|
||||
use("terrortylor/nvim-comment")
|
||||
use({ "akinsho/bufferline.nvim", tag = "*", requires = "nvim-tree/nvim-web-devicons" })
|
||||
|
||||
use("petertriho/nvim-scrollbar")
|
||||
|
||||
use({
|
||||
"nvim-tree/nvim-tree.lua",
|
||||
requires = {
|
||||
"nvim-tree/nvim-web-devicons", -- optional
|
||||
},
|
||||
config = function()
|
||||
require("nvim-tree").setup({})
|
||||
end,
|
||||
})
|
||||
|
||||
-- Autocompletion framework
|
||||
use("hrsh7th/nvim-cmp")
|
||||
use({
|
||||
-- cmp LSP completion
|
||||
"hrsh7th/cmp-nvim-lsp",
|
||||
"hrsh7th/cmp-nvim-lsp-signature-help",
|
||||
|
||||
-- cmp Snippet completion
|
||||
"hrsh7th/cmp-vsnip",
|
||||
-- cmp Path completion
|
||||
"hrsh7th/cmp-path",
|
||||
"hrsh7th/cmp-buffer",
|
||||
after = { "hrsh7th/nvim-cmp" },
|
||||
requires = { "hrsh7th/nvim-cmp" },
|
||||
})
|
||||
-- See hrsh7th other plugins for more great completion sources!
|
||||
-- Snippet engine
|
||||
use("hrsh7th/vim-vsnip")
|
||||
-- Adds extra functionality over rust analyzer
|
||||
use("simrat39/rust-tools.nvim")
|
||||
|
||||
-- Optional
|
||||
use("nvim-lua/popup.nvim")
|
||||
use("nvim-lua/plenary.nvim")
|
||||
use("nvim-telescope/telescope.nvim")
|
||||
|
||||
-- Some color scheme other then default
|
||||
use({ "ellisonleao/gruvbox.nvim" })
|
||||
use("rebelot/kanagawa.nvim")
|
||||
end)
|
||||
|
||||
-- the first run will install packer and our plugins
|
||||
if packer_bootstrap then
|
||||
require("packer").sync()
|
||||
return
|
||||
end
|
||||
|
||||
vim.o.background = "dark" -- or "light" for light mode
|
||||
vim.cmd([[colorscheme kanagawa]])
|
||||
|
||||
-- Set completeopt to have a better completion experience
|
||||
-- :help completeopt
|
||||
-- menuone: popup even when there's only one match
|
||||
-- noinsert: Do not insert text until a selection is made
|
||||
-- noselect: Do not auto-select, nvim-cmp plugin will handle this for us.
|
||||
vim.o.completeopt = "menuone,noinsert,noselect"
|
||||
|
||||
-- Avoid showing extra messages when using completion
|
||||
vim.opt.shortmess = vim.opt.shortmess + "c"
|
||||
|
||||
local function on_attach(client, buffer)
|
||||
vim.api.nvim_create_autocmd({ "BufWritePre" }, {
|
||||
buffer = buffer,
|
||||
callback = function()
|
||||
vim.lsp.buf.format()
|
||||
|
||||
end,
|
||||
})
|
||||
|
||||
local keymap_opts = { buffer = buffer }
|
||||
-- Code navigation and shortcuts
|
||||
vim.keymap.set("n", "<c-]>", vim.lsp.buf.definition, keymap_opts)
|
||||
vim.keymap.set("n", "K", vim.lsp.buf.hover, keymap_opts)
|
||||
vim.keymap.set("n", "gD", vim.lsp.buf.implementation, keymap_opts)
|
||||
vim.keymap.set("n", "<c-k>", vim.lsp.buf.signature_help, keymap_opts)
|
||||
vim.keymap.set("n", "1gD", vim.lsp.buf.type_definition, keymap_opts)
|
||||
vim.keymap.set("n", "gr", vim.lsp.buf.references, keymap_opts)
|
||||
vim.keymap.set("n", "g0", vim.lsp.buf.document_symbol, keymap_opts)
|
||||
vim.keymap.set("n", "gW", vim.lsp.buf.workspace_symbol, keymap_opts)
|
||||
vim.keymap.set("n", "gd", vim.lsp.buf.definition, keymap_opts)
|
||||
vim.keymap.set("n", "ga", vim.lsp.buf.code_action, keymap_opts)
|
||||
vim.keymap.set("n", "<leader>r", "<cmd>lua vim.lsp.buf.rename()<CR>", { noremap = true })
|
||||
|
||||
-- Show diagnostic popup on cursor hover
|
||||
local diag_float_grp = vim.api.nvim_create_augroup("DiagnosticFloat", { clear = true })
|
||||
vim.api.nvim_create_autocmd("CursorHold", {
|
||||
callback = function()
|
||||
vim.diagnostic.open_float(nil, { focusable = false })
|
||||
end,
|
||||
group = diag_float_grp,
|
||||
})
|
||||
|
||||
-- Goto previous/next diagnostic warning/error
|
||||
vim.keymap.set("n", "g[", vim.diagnostic.goto_prev, keymap_opts)
|
||||
vim.keymap.set("n", "g]", vim.diagnostic.goto_next, keymap_opts)
|
||||
end
|
||||
|
||||
vim.keymap.set("n", "<c-c>", function()
|
||||
if vim.bo.buftype ~= "nofile" and vim.bo.buftype ~= "terminal" then
|
||||
require('bufdelete').bufdelete(0, false)
|
||||
end
|
||||
end, keymap_opts)
|
||||
|
||||
-- Configure LSP through rust-tools.nvim plugin.
|
||||
-- rust-tools will configure and enable certain LSP features for us.
|
||||
-- See https://github.com/simrat39/rust-tools.nvim#configuration
|
||||
local opts = {
|
||||
tools = {
|
||||
runnables = {
|
||||
use_telescope = true,
|
||||
},
|
||||
inlay_hints = {
|
||||
auto = true,
|
||||
show_parameter_hints = false,
|
||||
parameter_hints_prefix = "",
|
||||
other_hints_prefix = "",
|
||||
},
|
||||
},
|
||||
|
||||
-- all the opts to send to nvim-lspconfig
|
||||
-- these override the defaults set by rust-tools.nvim
|
||||
-- see https://github.com/neovim/nvim-lspconfig/blob/master/CONFIG.md#rust_analyzer
|
||||
server = {
|
||||
-- on_attach is a callback called when the language server attachs to the buffer
|
||||
on_attach = on_attach,
|
||||
settings = {
|
||||
-- to enable rust-analyzer settings visit:
|
||||
-- https://github.com/rust-analyzer/rust-analyzer/blob/master/docs/user/generated_config.adoc
|
||||
["rust-analyzer"] = {
|
||||
-- enable clippy on save
|
||||
checkOnSave = {
|
||||
command = "clippy",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
require("rust-tools").setup(opts)
|
||||
|
||||
-- Setup Completion
|
||||
-- See https://github.com/hrsh7th/nvim-cmp#basic-configuration
|
||||
local cmp = require("cmp")
|
||||
cmp.setup({
|
||||
snippet = {
|
||||
expand = function(args)
|
||||
vim.fn["vsnip#anonymous"](args.body)
|
||||
end,
|
||||
},
|
||||
mapping = {
|
||||
["<Up>"] = cmp.mapping.select_prev_item(),
|
||||
["<Down>"] = cmp.mapping.select_next_item(),
|
||||
-- Add tab support
|
||||
["<S-Tab>"] = cmp.mapping.select_prev_item(),
|
||||
["<Tab>"] = cmp.mapping.select_next_item(),
|
||||
["<C-d>"] = cmp.mapping.scroll_docs(-4),
|
||||
["<C-f>"] = cmp.mapping.scroll_docs(4),
|
||||
["<C-Space>"] = cmp.mapping.complete(),
|
||||
["<C-e>"] = cmp.mapping.close(),
|
||||
["<CR>"] = cmp.mapping.confirm({
|
||||
behavior = cmp.ConfirmBehavior.Insert,
|
||||
select = true,
|
||||
}),
|
||||
},
|
||||
|
||||
-- Installed sources
|
||||
sources = {
|
||||
{ name = "nvim_lsp" },
|
||||
{ name = "nvim_lsp_signature_help" },
|
||||
{ name = "vsnip" },
|
||||
{ name = "path" },
|
||||
{ name = "buffer" },
|
||||
},
|
||||
})
|
||||
|
||||
-- have a fixed column for the diagnostics to appear in
|
||||
-- this removes the jitter when warnings/errors flow in
|
||||
vim.wo.signcolumn = "yes"
|
||||
|
||||
-- " Set updatetime for CursorHold
|
||||
-- " 300ms of no cursor movement to trigger CursorHold
|
||||
-- set updatetime=300
|
||||
vim.opt.updatetime = 100
|
||||
|
||||
local function open_nvim_tree(data)
|
||||
|
||||
-- buffer is a directory
|
||||
local directory = vim.fn.isdirectory(data.file) == 1
|
||||
|
||||
if not directory then
|
||||
return
|
||||
end
|
||||
|
||||
-- change to the directory
|
||||
vim.cmd.cd(data.file)
|
||||
|
||||
-- open the tree
|
||||
require("nvim-tree.api").tree.open()
|
||||
end
|
||||
vim.api.nvim_create_autocmd({ "VimEnter" }, { callback = open_nvim_tree })
|
||||
|
||||
require("nvim_comment").setup()
|
||||
require("bufferline").setup({
|
||||
options = {
|
||||
close_command = function (bufnum)
|
||||
require('bufdelete').bufdelete(bufnum)
|
||||
end
|
||||
}
|
||||
})
|
||||
require("scrollbar").setup()
|
||||
|
||||
vim.g.mapleader = ","
|
||||
|
||||
local builtin = require("telescope.builtin")
|
||||
vim.keymap.set("n", "<c-p>", builtin.find_files, {})
|
||||
vim.keymap.set("n", "<leader>ff", builtin.find_files, {})
|
||||
vim.keymap.set("n", "<leader>fg", builtin.live_grep, {})
|
||||
vim.keymap.set("n", "<leader>fb", builtin.buffers, {})
|
||||
vim.keymap.set("n", "<leader>fh", builtin.help_tags, {})
|
||||
vim.keymap.set("n", "<leader>t", require("nvim-tree.api").tree.toggle, {})
|
||||
vim.keymap.set("n", "<leader>g", require("neogit").open, {})
|
||||
vim.keymap.set("n", "<leader>tr", vim.diagnostic.reset, {})
|
||||
|
||||
vim.wo.number = true
|
||||
|
||||
vim.keymap.set("n", "<leader><leader>", ":luafile $MYVIMRC<CR>", {})
|
||||
|
||||
require("scope").setup({
|
||||
restore_state = false, -- experimental
|
||||
})
|
||||
|
||||
require'lspconfig'.tsserver.setup {}
|
||||
require'lspconfig'.ruby_ls.setup {
|
||||
cmd = { 'bundle', 'exec', 'ruby-lsp' },
|
||||
on_attach = function(client,bufnr)
|
||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||
group = augroup,
|
||||
buffer = bufnr,
|
||||
callback = function()
|
||||
vim.lsp.buf.format {
|
||||
async = false,
|
||||
}
|
||||
end,
|
||||
})
|
||||
end
|
||||
}
|
||||
require'lspconfig'.solargraph.setup{
|
||||
cmd = { "bundle", "exec", "solargraph", "stdio" },
|
||||
on_attach = on_attach
|
||||
}
|
||||
|
||||
local null_ls = require("null-ls")
|
||||
|
||||
local augroup = vim.api.nvim_create_augroup("LspFormatting", {})
|
||||
null_ls.setup({
|
||||
sources = {
|
||||
null_ls.builtins.formatting.prettierd,
|
||||
null_ls.builtins.formatting.rubocop
|
||||
},
|
||||
-- you can reuse a shared lspconfig on_attach callback here
|
||||
on_attach = function(client, bufnr)
|
||||
if client.supports_method("textDocument/formatting") then
|
||||
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
|
||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||
group = augroup,
|
||||
buffer = bufnr,
|
||||
callback = function()
|
||||
-- on 0.8, you should use vim.lsp.buf.format({ bufnr = bufnr }) instead
|
||||
-- on later neovim version, you should use vim.lsp.buf.format({ async = false }) instead
|
||||
vim.lsp.buf.format {
|
||||
async = false,
|
||||
filter = function(client) return client.name ~= "tsserver" end
|
||||
}
|
||||
end,
|
||||
})
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
vim.o.wrap = false
|
||||
19
open_nvim_action.py
Normal file
19
open_nvim_action.py
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
import os
|
||||
from .targets.file_target import FileTarget
|
||||
from .actions.send_to_vim_in_tmux_pane_action import SendToVimInTmuxPaneAction
|
||||
from .actions.action import Action
|
||||
from .targets.target_payload import EditorOpenable
|
||||
|
||||
class VimRemoteOpen(Action):
|
||||
def __init__(self, target_payload: EditorOpenable):
|
||||
self.target_payload = target_payload
|
||||
|
||||
def perform(self):
|
||||
path = self.target_payload.file_path
|
||||
|
||||
if self.target_payload.line_number:
|
||||
path += f':{self.target_payload.line_number}'
|
||||
|
||||
os.system(f'nvim --server ~/.cache/nvim/server.pipe --remote {path}')
|
||||
|
||||
FileTarget.primary_action = VimRemoteOpen
|
||||
21
tmux.conf
Normal file
21
tmux.conf
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
set -g mouse on
|
||||
|
||||
# List of plugins
|
||||
set -g @plugin 'tmux-plugins/tpm'
|
||||
set -g @plugin 'tmux-plugins/tmux-sensible'
|
||||
set -g @plugin 'egel/tmux-gruvbox'
|
||||
set -g @plugin 'artemave/tmux_super_fingers'
|
||||
set -g @super-fingers-extend ~/src/dotfiles/open_nvim_action.py
|
||||
|
||||
set -g @tmux-gruvbox 'dark'
|
||||
|
||||
# Other examples:
|
||||
# set -g @plugin 'github_username/plugin_name'
|
||||
# set -g @plugin 'github_username/plugin_name#branch'
|
||||
# set -g @plugin 'git@github.com:user/plugin'
|
||||
# set -g @plugin 'git@bitbucket.com:user/plugin'
|
||||
|
||||
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
|
||||
run '~/.tmux/plugins/tpm/tpm'
|
||||
|
||||
bind r source-file ~/.tmux.conf
|
||||
Loading…
Reference in a new issue