dotfiles

My personal shell configs and stuff
git clone git://git.alex.balgavy.eu/dotfiles.git
Log | Files | Refs | Submodules | README | LICENSE

commit 39e90472d2a138a850c439c62bfa858f1bac591d
parent 216bef6cc96ef6a3b6fbdb10eaae4681df3f3ed5
Author: Alex Balgavy <alex@balgavy.eu>
Date:   Wed,  4 Jan 2023 16:52:30 +0100

vim/nvim: various config things

Diffstat:
Mnvim/init.lua | 424++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------
Dnvim/lua/plugins.lua | 32--------------------------------
Mvim/vimrc | 131++++++++++++++++++++++++++++++++++++++++++-------------------------------------
3 files changed, 445 insertions(+), 142 deletions(-)

diff --git a/nvim/init.lua b/nvim/init.lua @@ -1,73 +1,401 @@ vim.cmd([[ set runtimepath^=~/.vim runtimepath+=~/.vim/after let &packpath = &runtimepath -source ~/.vim/vimrc +call setenv("MYOLDVIMRC", "~/.vim/vimrc") +source $MYOLDVIMRC ]]) --- neovim plugins -require('plugins') +-- Install packer +local install_path = vim.fn.stdpath 'data' .. '/site/pack/packer/start/packer.nvim' +local is_bootstrap = false +if vim.fn.empty(vim.fn.glob(install_path)) > 0 then + is_bootstrap = true + vim.fn.system { 'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path } + vim.cmd [[packadd packer.nvim]] +end + +require('packer').startup(function(use) + -- Package manager + use 'wbthomason/packer.nvim' + + use { -- LSP Configuration & Plugins + 'neovim/nvim-lspconfig', + requires = { + -- Automatically install LSPs to stdpath for neovim + 'williamboman/mason.nvim', + 'williamboman/mason-lspconfig.nvim', + + -- Useful status updates for LSP + 'j-hui/fidget.nvim', + + -- Additional lua configuration, makes nvim stuff amazing + 'folke/neodev.nvim', + }, + } + + use { -- Autocompletion + 'hrsh7th/nvim-cmp', + requires = { 'hrsh7th/cmp-nvim-lsp', 'L3MON4D3/LuaSnip', 'saadparwaiz1/cmp_luasnip' }, + } + + use { -- Highlight, edit, and navigate code + 'nvim-treesitter/nvim-treesitter', + run = function() + pcall(require('nvim-treesitter.install').update { with_sync = true }) + end, + } + + use { -- Additional text objects via treesitter + 'nvim-treesitter/nvim-treesitter-textobjects', + after = 'nvim-treesitter', + } + + -- Git related plugins + use 'lewis6991/gitsigns.nvim' + + use 'lukas-reineke/indent-blankline.nvim' -- Add indentation guides even on blank lines + use 'numToStr/Comment.nvim' -- "gc" to comment visual regions/lines -local custom_lsp_attach = function(client) - -- See `:help nvim_buf_set_keymap()` for more information - vim.api.nvim_buf_set_keymap(0, 'n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', {noremap = true}) - vim.api.nvim_buf_set_keymap(0, 'n', '<c-]>', '<cmd>lua vim.lsp.buf.definition()<CR>', {noremap = true}) + -- Fuzzy Finder (files, lsp, etc) + use { 'nvim-telescope/telescope.nvim', branch = '0.1.x', requires = { 'nvim-lua/plenary.nvim' } } - -- Use LSP as the handler for omnifunc. - vim.api.nvim_buf_set_option(0, 'omnifunc', 'v:lua.vim.lsp.omnifunc') + -- Fuzzy Finder Algorithm which requires local dependencies to be built. Only load if `make` is available + use { 'nvim-telescope/telescope-fzf-native.nvim', run = 'make', cond = vim.fn.executable 'make' == 1 } - -- Use LSP as the handler for formatexpr. - vim.api.nvim_buf_set_option(0, 'formatexpr', 'v:lua.vim.lsp.formatexpr()') + -- Linting - for when LSP is not enough + use 'mfussenegger/nvim-lint' - -- For plugins with an `on_attach` callback, call them here. For example: - -- require('completion').on_attach() + -- Add custom plugins to packer from ~/.config/nvim/lua/custom/plugins.lua + local has_plugins, plugins = pcall(require, 'custom.plugins') + if has_plugins then + plugins(use) + end + + if is_bootstrap then + require('packer').sync() + end +end) + +-- When we are bootstrapping a configuration, it doesn't +-- make sense to execute the rest of the init.lua. +-- +-- You'll need to restart nvim, and then it will work. +if is_bootstrap then + print '==================================' + print ' Plugins are being installed' + print ' Wait until Packer completes,' + print ' then restart nvim' + print '==================================' + return end -require'lspconfig'.rust_analyzer.setup({ - on_attach = custom_lsp_attach +-- Automatically source and re-compile packer whenever you save this init.lua +local packer_group = vim.api.nvim_create_augroup('Packer', { clear = true }) +vim.api.nvim_create_autocmd('BufWritePost', { + command = 'source <afile> | PackerCompile', + group = packer_group, + pattern = vim.fn.expand '$MYVIMRC', }) -vim.keymap.set('n', '<space>e', vim.diagnostic.open_float, {noremap = true}) -vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, {noremap = true}) -vim.keymap.set('n', ']d', vim.diagnostic.goto_next, {noremap = true}) -vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, {noremap = true}) -require'lspconfig'.pyright.setup{} +-- [[ Setting options ]] +-- See `:help vim.o` -require'lint'.linters_by_ft = { - -- python = {'flake8',}, - sh = {'shellcheck',} -} -vim.api.nvim_create_autocmd({ "BufWritePost" }, { +-- Set completeopt to have a better completion experience +vim.o.completeopt = 'menuone,noselect' + +-- [[ Basic Keymaps ]] +-- Set <space> as the leader key +-- See `:help mapleader` +-- NOTE: Must happen before plugins are required (otherwise wrong leader will be used) +vim.g.mapleader = ' ' +vim.g.maplocalleader = ' ' + +-- Keymaps for better default experience +-- See `:help vim.keymap.set()` +vim.keymap.set({ 'n', 'v' }, '<Space>', '<Nop>', { silent = true }) + +-- [[ Highlight on yank ]] +-- See `:help vim.highlight.on_yank()` +local highlight_group = vim.api.nvim_create_augroup('YankHighlight', { clear = true }) +vim.api.nvim_create_autocmd('TextYankPost', { callback = function() - require("lint").try_lint() + vim.highlight.on_yank() end, + group = highlight_group, + pattern = '*', }) -require'nvim-treesitter.configs'.setup { - -- Automatically install missing parsers when entering buffer - auto_install = true, - -- Consistent syntax highlighting - highlight = { - enable = true, - -- Setting this to true will run `:h syntax` and tree-sitter at the same time. - -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation). - -- Using this option may slow down your editor, and you may see some duplicate highlights. - -- Instead of true it can also be a list of languages - additional_vim_regex_highlighting = false, +-- Enable Comment.nvim +require('Comment').setup() + +-- Enable `lukas-reineke/indent-blankline.nvim` +-- See `:help indent_blankline.txt` +require('indent_blankline').setup { + char = '┊', + show_trailing_blankline_indent = false, + filetype = {'python'}, +} + +-- Gitsigns +-- See `:help gitsigns.txt` +require('gitsigns').setup { + signs = { + add = { text = '+' }, + change = { text = '~' }, + delete = { text = '_' }, + topdelete = { text = '‾' }, + changedelete = { text = '~' }, + }, +} + +-- [[ Configure Telescope ]] +-- See `:help telescope` and `:help telescope.setup()` +require('telescope').setup { + defaults = { + mappings = { + i = { + ['<C-u>'] = false, + ['<C-d>'] = false, + }, + }, }, +} + +-- Enable telescope fzf native, if installed +pcall(require('telescope').load_extension, 'fzf') + +-- See `:help telescope.builtin` +vim.keymap.set('n', '<leader>?', require('telescope.builtin').oldfiles, { desc = '[?] Find recently opened files' }) +vim.keymap.set('n', '<leader><space>', require('telescope.builtin').buffers, { desc = '[ ] Find existing buffers' }) +vim.keymap.set('n', '<leader>/', function() + -- You can pass additional configuration to telescope to change theme, layout, etc. + require('telescope.builtin').current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { + winblend = 10, + previewer = false, + }) +end, { desc = '[/] Fuzzily search in current buffer]' }) + +vim.keymap.set('n', '<leader>sf', require('telescope.builtin').find_files, { desc = '[S]earch [F]iles' }) +vim.keymap.set('n', '<leader>sh', require('telescope.builtin').help_tags, { desc = '[S]earch [H]elp' }) +vim.keymap.set('n', '<leader>sw', require('telescope.builtin').grep_string, { desc = '[S]earch current [W]ord' }) +vim.keymap.set('n', '<leader>sg', require('telescope.builtin').live_grep, { desc = '[S]earch by [G]rep' }) +vim.keymap.set('n', '<leader>sd', require('telescope.builtin').diagnostics, { desc = '[S]earch [D]iagnostics' }) + +-- [[ Configure Treesitter ]] +-- See `:help nvim-treesitter` +require('nvim-treesitter.configs').setup { + -- Add languages to be installed here that you want installed for treesitter + ensure_installed = { 'c', 'cpp', 'go', 'lua', 'python', 'rust', 'typescript', 'help', 'vim', 'bash', 'ledger', 'ruby', 'python' }, + + highlight = { enable = true }, + indent = { enable = true, disable = { 'python' } }, incremental_selection = { enable = true, keymaps = { - init_selection = "gnn", - node_incremental = "grn", - scope_incremental = "grc", - node_decremental = "grm", + init_selection = '<c-space>', + node_incremental = '<c-space>', + scope_incremental = '<c-s>', + node_decremental = '<c-backspace>', + }, + }, + textobjects = { + select = { + enable = true, + lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim + keymaps = { + -- You can use the capture groups defined in textobjects.scm + ['aa'] = '@parameter.outer', + ['ia'] = '@parameter.inner', + ['af'] = '@function.outer', + ['if'] = '@function.inner', + ['ac'] = '@class.outer', + ['ic'] = '@class.inner', + }, + }, + move = { + enable = true, + set_jumps = true, -- whether to set jumps in the jumplist + goto_next_start = { + [']m'] = '@function.outer', + [']]'] = '@class.outer', + }, + goto_next_end = { + [']M'] = '@function.outer', + [']['] = '@class.outer', + }, + goto_previous_start = { + ['[m'] = '@function.outer', + ['[['] = '@class.outer', + }, + goto_previous_end = { + ['[M'] = '@function.outer', + ['[]'] = '@class.outer', + }, + }, + swap = { + enable = true, + swap_next = { + ['<leader>a'] = '@parameter.inner', + }, + swap_previous = { + ['<leader>A'] = '@parameter.inner', + }, }, }, - indent = { - enable = true - } } -vim.cmd([[ -set foldmethod=expr -set foldexpr=nvim_treesitter#foldexpr() -]]) + +-- Diagnostic keymaps +vim.keymap.set('n', '[d', vim.diagnostic.goto_prev) +vim.keymap.set('n', ']d', vim.diagnostic.goto_next) +vim.keymap.set('n', '<leader>e', vim.diagnostic.open_float) +vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist) + +-- LSP settings. +-- This function gets run when an LSP connects to a particular buffer. +local on_attach = function(_, bufnr) + -- NOTE: Remember that lua is a real programming language, and as such it is possible + -- to define small helper and utility functions so you don't have to repeat yourself + -- many times. + -- + -- In this case, we create a function that lets us more easily define mappings specific + -- for LSP related items. It sets the mode, buffer and description for us each time. + local nmap = function(keys, func, desc) + if desc then + desc = 'LSP: ' .. desc + end + + vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) + end + + nmap('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame') + nmap('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction') + + nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition') + nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') + nmap('gI', vim.lsp.buf.implementation, '[G]oto [I]mplementation') + nmap('<leader>D', vim.lsp.buf.type_definition, 'Type [D]efinition') + nmap('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') + nmap('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') + + -- See `:help K` for why this keymap + nmap('K', vim.lsp.buf.hover, 'Hover Documentation') + nmap('<C-k>', vim.lsp.buf.signature_help, 'Signature Documentation') + + -- Lesser used LSP functionality + nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') + nmap('<leader>wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder') + nmap('<leader>wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder') + nmap('<leader>wl', function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, '[W]orkspace [L]ist Folders') + + -- Create a command `:Format` local to the LSP buffer + vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) + vim.lsp.buf.format() + end, { desc = 'Format current buffer with LSP' }) +end + +-- Enable the following language servers +-- Feel free to add/remove any LSPs that you want here. They will automatically be installed. +-- https://github.com/williamboman/mason-lspconfig.nvim/blob/main/doc/server-mapping.md +-- Add any additional override configuration in the following tables. They will be passed to +-- the `settings` field of the server config. You must look up that documentation yourself. +local servers = { + -- clangd = {}, + -- gopls = {}, + -- tsserver = {}, + ruby_ls = {}, + rust_analyzer = {}, + bashls = {}, + pyright = {}, + sumneko_lua = { + Lua = { + workspace = { checkThirdParty = false }, + telemetry = { enable = false }, + }, + }, +} + +-- Setup neovim lua configuration +require('neodev').setup() +-- +-- nvim-cmp supports additional completion capabilities, so broadcast that to servers +local capabilities = vim.lsp.protocol.make_client_capabilities() +capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) + +-- Setup mason so it can manage external tooling +require('mason').setup() + +-- Ensure the servers above are installed +local mason_lspconfig = require 'mason-lspconfig' + +mason_lspconfig.setup { + ensure_installed = vim.tbl_keys(servers), +} + +mason_lspconfig.setup_handlers { + function(server_name) + require('lspconfig')[server_name].setup { + capabilities = capabilities, + on_attach = on_attach, + settings = servers[server_name], + } + end, +} + +-- Turn on lsp status information +require('fidget').setup() + +-- nvim-cmp setup +local cmp = require 'cmp' +require("luasnip.loaders.from_snipmate").lazy_load({paths="~/.dotfiles/vim/snippets"}) +local luasnip = require 'luasnip' + +cmp.setup { + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert { + ['<C-d>'] = cmp.mapping.scroll_docs(-4), + ['<C-f>'] = cmp.mapping.scroll_docs(4), + ['<C-Space>'] = cmp.mapping.complete(), + ['<CR>'] = cmp.mapping.confirm { + behavior = cmp.ConfirmBehavior.Replace, + select = true, + }, + ['<Tab>'] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + else + fallback() + end + end, { 'i', 's' }), + ['<S-Tab>'] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { 'i', 's' }), + }, + sources = { + { name = 'nvim_lsp' }, + { name = 'luasnip' }, + }, +} + +-- linting +require('lint').linters_by_ft = { + sh = {'shellcheck'}, +} +vim.api.nvim_create_autocmd({ "BufWritePost" }, { + callback = function() + require("lint").try_lint() + end, +}) diff --git a/nvim/lua/plugins.lua b/nvim/lua/plugins.lua @@ -1,32 +0,0 @@ -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() - -return require('packer').startup(function(use) - -- Packer can manage itself - use 'wbthomason/packer.nvim' - use 'neovim/nvim-lspconfig' - use { - 'nvim-treesitter/nvim-treesitter', - run = function() - local ts_update = require('nvim-treesitter.install').update({ with_sync = true }) - ts_update() - end, - } - use 'mfussenegger/nvim-lint' - - -- Automatically set up your configuration after cloning packer.nvim - -- Put this at the end after all plugins - if packer_bootstrap then - require('packer').sync() - end -end) diff --git a/vim/vimrc b/vim/vimrc @@ -1,5 +1,6 @@ " vim: foldmethod=marker foldlevel=0 let mapleader=" " " Set the mapleader to be space +let maplocalleader=" " " Plugins {{{1 " Installation {{{2 @@ -19,9 +20,6 @@ Plug 'junegunn/vader.vim' " A color table with xterm color codes Plug 'guns/xterm-color-table.vim' -" Simple commenting -Plug 'tpope/vim-commentary' - " Faster HTML Plug 'mattn/emmet-vim', { 'for': ['html', 'css', 'markdown'] } @@ -69,13 +67,6 @@ Plug 'romainl/vim-cool' " Vim + latex Plug 'lervag/vimtex' -" Snippets -Plug 'SirVer/ultisnips' - -" Fuzzy finder in vim -Plug 'junegunn/fzf', { 'dir': '$HOME/.dotfiles/tools/fzf', 'do': './install --all --xdg --no-fish'} -Plug 'junegunn/fzf.vim' - " Better abbrevation and substitution Plug 'tpope/vim-abolish' @@ -85,9 +76,6 @@ Plug 'chrisbra/colorizer' " Pywal scheme in vim Plug 'dylanaraps/wal.vim' -" Show git changes in the sign column -Plug 'airblade/vim-gitgutter' - " Bracket bindings for filetypes Plug 'arp242/jumpy.vim' @@ -149,8 +137,6 @@ Plug 'skanehira/gh.vim' " Minesweeper Plug 'iqxd/vim-mine-sweeping' -Plug 'Yggdroot/indentLine', { 'for': 'python' } - Plug 'jceb/vim-orgmode', { 'for': 'org' } " Rust @@ -165,8 +151,23 @@ if !has('nvim') Plug 'markonm/traces.vim' Plug 'dense-analysis/ale' + + " Show git changes in the sign column + Plug 'airblade/vim-gitgutter' + + Plug 'Yggdroot/indentLine', { 'for': 'python' } + + " Simple commenting + Plug 'tpope/vim-commentary' + + " Fuzzy finder in vim + Plug 'junegunn/fzf', { 'dir': '$HOME/.dotfiles/tools/fzf', 'do': './install --all --xdg --no-fish'} + Plug 'junegunn/fzf.vim' + endif +" Snippets +Plug 'SirVer/ultisnips' call plug#end() " quickfix filtering @@ -304,55 +305,57 @@ set completefunc=ultisnips_complete#ListSnippets " NOTE: performance improvement. autotrigger leads to slow typing in markdown " mode. augroup ultisnips_no_auto_expansion - au! - au VimEnter * au! UltiSnips_AutoTrigger + au! + au VimEnter * au! UltiSnips_AutoTrigger augroup END " Abolish {{{3 " Work with variants of words easily let g:abolish_save_file = '"$HOME"/.dotfiles/vim/abolish_save_file.vim' " Fzf {{{3 -set rtp+="$HOME"/.dotfiles/tools/fzf -function! s:build_quickfix_list(lines) - call setqflist(map(copy(a:lines), '{ "filename": v:val }')) - copen - cc -endfunction -let g:fzf_action = { - \ 'ctrl-f': function('s:build_quickfix_list'), - \ 'ctrl-t': 'tabedit', - \ 'ctrl-p': 'split', - \ 'ctrl-v': 'vsplit' } -let g:fzf_layout = {'window': { 'width': 0.9, 'height': 0.4 } } -let g:fzf_preview_window = 'right:60%' -" Jump to existing buffer/window if possible -let g:fzf_buffers_jump = 1 - -nnoremap <leader>F :Files<CR> -nnoremap <leader><c-f><c-f> :Files<space> -nnoremap <expr> <leader><c-f>. ":Files " .. expand("%:h") .. "<CR>" -nnoremap <leader>B :Buffers<CR> -nnoremap <leader>G :Lines<CR> -nnoremap <leader>W :BLines<CR> -nnoremap <expr> <leader>Z ':BLines '..&foldmarker->split(',')[0]..'<CR>' -nnoremap <leader>? :Helptags<CR> -nnoremap <leader>T :Tags<CR> -nnoremap <leader>/ :Ag<CR> -nnoremap <leader>M :Marks<CR> -nnoremap <leader>; :History:<CR> - -" My extensions -nmap <leader>J <Plug>FzfChangesJumpsJumps -nmap <leader>C <Plug>FzfChangesJumpsChanges - -" Search for Todos/Fixmes -command! Todo Ag ((TO ?DO)|FIXME):<space> -nnoremap <leader>! :Todo<CR> - -" Set a filetype -cabbrev setf Filetypes - -command! Scripts call fzf#run(fzf#wrap({'source': 'command find "$(readlink ~/.scripts)" -type f -or -type l -not -ipath "*/.git/*"', 'options': '--multi --reverse --inline-info --prompt="scripts> "', 'sink': 'sp'})) -command! Configs call fzf#run(fzf#wrap({'source': 'command find ~/.dotfiles -type f ! -ipath "*/.git/*" ! -ipath "*/bin/*" ! -ipath "*/oh-my-zsh/*" ! -name ".DS_Store"', 'options': '--multi --reverse --inline-info --prompt="configs> "', 'sink': 'sp'})) +if exists('g:loaded_fzf') + set rtp+="$HOME"/.dotfiles/tools/fzf + function! s:build_quickfix_list(lines) + call setqflist(map(copy(a:lines), '{ "filename": v:val }')) + copen + cc + endfunction + let g:fzf_action = { + \ 'ctrl-f': function('s:build_quickfix_list'), + \ 'ctrl-t': 'tabedit', + \ 'ctrl-p': 'split', + \ 'ctrl-v': 'vsplit' } + let g:fzf_layout = {'window': { 'width': 0.9, 'height': 0.4 } } + let g:fzf_preview_window = 'right:60%' + " Jump to existing buffer/window if possible + let g:fzf_buffers_jump = 1 + + nnoremap <leader>F :Files<CR> + nnoremap <leader><c-f><c-f> :Files<space> + nnoremap <expr> <leader><c-f>. ":Files " .. expand("%:h") .. "<CR>" + nnoremap <leader>B :Buffers<CR> + nnoremap <leader>G :Lines<CR> + nnoremap <leader>W :BLines<CR> + nnoremap <expr> <leader>Z ':BLines '..&foldmarker->split(',')[0]..'<CR>' + nnoremap <leader>? :Helptags<CR> + nnoremap <leader>T :Tags<CR> + nnoremap <leader>/ :Ag<CR> + nnoremap <leader>M :Marks<CR> + nnoremap <leader>; :History:<CR> + + " My extensions + nmap <leader>J <Plug>FzfChangesJumpsJumps + nmap <leader>C <Plug>FzfChangesJumpsChanges + + " Search for Todos/Fixmes + command! Todo Ag ((TO ?DO)|FIXME):<space> + nnoremap <leader>! :Todo<CR> + + " Set a filetype + cabbrev setf Filetypes + + command! Scripts call fzf#run(fzf#wrap({'source': 'command find "$(readlink ~/.scripts)" -type f -or -type l -not -ipath "*/.git/*"', 'options': '--multi --reverse --inline-info --prompt="scripts> "', 'sink': 'sp'})) + command! Configs call fzf#run(fzf#wrap({'source': 'command find ~/.dotfiles -type f ! -ipath "*/.git/*" ! -ipath "*/bin/*" ! -ipath "*/oh-my-zsh/*" ! -name ".DS_Store"', 'options': '--multi --reverse --inline-info --prompt="configs> "', 'sink': 'sp'})) +endif " Vimwiki {{{3 let tlist_vimwiki_settings = 'wiki;h:Headers' let g:vimwiki_table_mappings = 0 " avoid vimwiki conflict with Ultisnips @@ -481,9 +484,11 @@ if exists('g:loaded_ale') endif " indentLine {{{3 -let g:indentLine_char_list = ['|', '¦', '┆', '┊'] -let g:indentLine_enable = 0 " off by default -let g:indentLine_fileType = ['python'] " enable for python +if !has('nvim') + let g:indentLine_char_list = ['|', '¦', '┆', '┊'] + let g:indentLine_enable = 0 " off by default + let g:indentLine_fileType = ['python'] " enable for python +endif " Emmet {{{3 let g:user_emmet_settings = { \ 'markdown': { @@ -824,6 +829,7 @@ command! Fuckwindows %s/ //g command! Hexedit %!xxd command! Unhex %!xxd -r command! JsonSimplifyObject %s/^\(\s\{10}\){\n\s\{12\}\(.*\)\n\s\{10\}}\(,\?\)/\1{ \2 }\3 +command! UnsmartQuotes silent %s/[“”]/"/ge | %s/[‘’]/'/ge command! BeautifyJson %!python -m json.tool command! Dos2unix %!dos2unix command! -nargs=1 Cheat terminal curl cheat.sh/<args> @@ -925,6 +931,7 @@ nnoremap <leader><c-l> :syntax sync fromstart<CR>:redraw!<CR>:diffupdate<CR><c-l " urlview nnoremap <silent> U :w !urlview<CR> +nnoremap <leader>U U " 'zoom to head level' nnoremap zh mzzt10<c-u>`z