Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

attempt to yield across C-call boundary #3

Open
samuelfite opened this issue May 4, 2023 · 3 comments
Open

attempt to yield across C-call boundary #3

samuelfite opened this issue May 4, 2023 · 3 comments

Comments

@samuelfite
Copy link

samuelfite commented May 4, 2023

Starting neovim gives the following error after installing ranger.nvim:
Error detected while processing /home/sam/dotfiles/config/nvim/nvim/init.vim: line 94: E5108: Error executing lua /home/sam/.vim/plugged/libp.nvim/lua/libp/fs/uv_async.lua:17: attempt to yield across C-call boundary stack traceback: [C]: in function 'async_fn' /home/sam/.vim/plugged/libp.nvim/lua/libp/fs/uv_async.lua:17: in function 'fs_open' /home/sam/.vim/plugged/libp.nvim/lua/libp/fs/init.lua:29: in function 'is_readable' ...sam/.vim/plugged/ranger.nvim/lua/ranger/action/Rifle.lua:45: in function 'init' ...e/sam/.vim/plugged/libp.nvim/lua/libp/datatype/Class.lua:151: in function 'Rifle' .../sam/.vim/plugged/ranger.nvim/lua/ranger/action/init.lua:24: in function 'setup' /home/sam/.vim/plugged/ranger.nvim/lua/ranger.lua:29: in function 'setup' [string ":lua"]:2: in main chunk Press ENTER or type command to continue

Neovim Version:
NVIM v0.9.0 Build type: RelWithDebInfo LuaJIT 2.1.0-beta3 Compilation: /usr/bin/gcc -O2 -g -Og -g -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion -Wvla -Wdouble-promotion -Wmissing-noreturn -Wmissing-format-attribute -Wmissing-prototypes -fno-common -Wno-unused-result -Wimplicit-fallthrough -fdiagnostics-color=auto -fstack-protector-strong -DUNIT_TESTING -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -I/usr/include/luajit-2.1 -I/usr/include -I/usr/include/luajit-2.1 -I/builddir/build/BUILD/neovim-0.9.0/redhat-linux-build/src/nvim/auto -I/builddir/build/BUILD/neovim-0.9.0/redhat-linux-build/include -I/builddir/build/BUILD/neovim-0.9.0/redhat-linux-build/cmake.config -I/builddir/build/BUILD/neovim-0.9.0/src -I/usr/include -I/usr/include -I/usr/include -I/usr/include -I/usr/include -I/usr/include -I/usr/include

ranger version:
ranger version: ranger 1.9.3 Python version: 3.11.1 (main, Jan 6 2023, 00:00:00) [GCC 12.2.1 20221121 (Red Hat 12.2.1-4)] Locale: en_US.UTF-8

uname -a:
Linux fedora 6.1.8-200.fc37.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Jan 24 20:32:16 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

lua version:
Lua 5.4.4 Copyright (C) 1994-2022 Lua.org, PUC-Rio

init.vim (I know it's messy I've been meaning to clean it up):

if empty(glob(data_dir . '/autoload/plug.vim'))
   silent execute '!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs  https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
   autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif

" polyglot indent can be slow, plus we have treesitter indent anyway
let g:polyglot_disabled = ['autoindent','sensible']

call plug#begin('~/.vim/plugged')

Plug 'machakann/vim-highlightedyank'    " Briefly highlight which text was yanked.
Plug 'nelstrom/vim-visual-star-search'  " Modify * to also work with visual selections.
Plug 'tpope/vim-commentary'             " Un/Comment via gc
" Plug 'ajh17/VimCompletesMe'             " complete file paths
Plug 'mhinz/vim-grepper'                " search vim files for term
Plug 'tpope/vim-repeat'                 " repeat commands
Plug 'ap/vim-css-color'                 " color highlighting of colorcodes
Plug 'Yggdroot/indentLine'              " indent line guides
Plug 'tpope/vim-fugitive'               " git wraper
Plug 'tpope/vim-capslock'               " Press <C-G>c in insert mode, or gC in normal mode
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'

Plug 'nathangrigg/vim-beancount'
Plug 'mbbill/undotree'

Plug 'sheerun/vim-polyglot'
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}  " We recommend updating the parsers on update
Plug 'nvim-treesitter/nvim-treesitter-context'
Plug 'nvim-treesitter/playground'

Plug 'rbgrouleff/bclose.vim'
" Plug 'francoiscabrol/ranger.vim'   " LOOK AT RANGER.NVIM

" Plug 'gruvbox-community/gruvbox'
" Plug 'luisiacc/gruvbox-baby', {'branch': 'main'}


" Plug 'nathom/filetype.nvim'

Plug 'qxxxb/vim-searchhi'  "search highlighting
Plug 'osyo-manga/vim-anzu' "search match count

Plug 'godlygeek/tabular'
Plug 'sainnhe/gruvbox-material'
Plug 'nvim-lua/plenary.nvim' " don't forget to add this one if you don't have it yet!
Plug 'ThePrimeagen/harpoon'
Plug 'preservim/nerdtree'

" nvim v0.5.0
Plug 'kdheepak/lazygit.nvim'
Plug 'voldikss/vim-floaterm'

" Plug 'dhruvasagar/vim-table-mode' conflicts with tabular
" Plug 'vifm/vifm.vim'

" LSP Support
Plug 'neovim/nvim-lspconfig'             " Required
Plug 'williamboman/mason.nvim'           " Optional
Plug 'williamboman/mason-lspconfig.nvim' " Optional

" Autocompletion Engine
Plug 'hrsh7th/nvim-cmp'         " Required
Plug 'hrsh7th/cmp-nvim-lsp'     " Required
Plug 'hrsh7th/cmp-buffer'       " Optional
Plug 'hrsh7th/cmp-path'         " Optional
Plug 'saadparwaiz1/cmp_luasnip' " Optional
Plug 'hrsh7th/cmp-nvim-lua'     " Optional

" Snippets
Plug 'L3MON4D3/LuaSnip'             " Required
Plug 'rafamadriz/friendly-snippets' " Optional

" LSP Setup
Plug 'VonHeikemen/lsp-zero.nvim', {'branch': 'v1.x'}

Plug 'stsewd/fzf-checkout.vim' " :GBranches

Plug 'folke/which-key.nvim'     " also does register preview

Plug 'ipod825/libp.nvim'
Plug 'ipod825/ranger.nvim'
call plug#end()

set signcolumn=yes

nnoremap M M
nnoremap <leader>m :Man<CR>

lua << EOF
   require("libp").setup()
   require("ranger").setup()
EOF


" LSP-ZERO
  " set_lsp_keymaps = {omit = {'K'}},
lua <<EOF
local lsp = require('lsp-zero').preset({
  name = 'recommended',
  manage_nvim_cmp = true,
  suggest_lsp_servers = true,
})

lsp.default_keymaps({
  buffer = bufnr,
  preserve_mappings = false,
})

--- Don't preselect first match
--- For those who want to use the Enter key freely.
lsp.setup_nvim_cmp({
  preselect = 'none',
  completion = {
    completeopt = 'menu,menuone,noinsert,noselect'
  },
})

lsp.setup()
EOF

" TREESITTER CONTEXT
lua <<EOF
require'treesitter-context'.setup{
    enable = true, -- Enable this plugin (Can be enabled/disabled later via commands)
    max_lines = 0, -- How many lines the window should span. Values <= 0 mean no limit.
    trim_scope = 'outer', -- Which context lines to discard if `max_lines` is exceeded. Choices: 'inner', 'outer'
    min_window_height = 0, -- Minimum editor window height to enable context. Values <= 0 mean no limit.
    patterns = { -- Match patterns for TS nodes. These get wrapped to match at word boundaries.
        -- For all filetypes
        -- Note that setting an entry here replaces all other patterns for this entry.
        -- By setting the 'default' entry below, you can control which nodes you want to
        -- appear in the context window.
        default = {
            'class',
            'function',
            'method',
            'for',
            'while',
            'if',
            'switch',
            'case',
            'interface',
            'struct',
            'enum',
        },
        -- Patterns for specific filetypes
        -- If a pattern is missing, *open a PR* so everyone can benefit.
        tex = {
            'chapter',
            'section',
            'subsection',
            'subsubsection',
        },
        haskell = {
            'adt'
        },
        rust = {
            'impl_item',
        },
        terraform = {
            'block',
            'object_elem',
            'attribute',
        },
        scala = {
            'object_definition',
        },
        vhdl = {
            'process_statement',
            'architecture_body',
            'entity_declaration',
        },
        markdown = {
            'section',
        },
        elixir = {
            'anonymous_function',
            'arguments',
            'block',
            'do_block',
            'list',
            'map',
            'tuple',
            'quoted_content',
        },
        json = {
            'pair',
        },
        typescript = {
            'export_statement',
        },
        yaml = {
            'block_mapping_pair',
        },
    },
    exact_patterns = {
        -- Example for a specific filetype with Lua patterns
        -- Treat patterns.rust as a Lua pattern (i.e "^impl_item$" will
        -- exactly match "impl_item" only)
        -- rust = true,
    },

    -- [!] The options below are exposed but shouldn't require your attention,
    --     you can safely ignore them.

    zindex = 20, -- The Z-index of the context window
    mode = 'cursor',  -- Line used to calculate context. Choices: 'cursor', 'topline'
    -- Separator between context and content. Should be a single character string, like '-'.
    -- When separator is set, the context will only show up when there are at least 2 lines above cursorline.
    separator = nil,
}
EOF

" WHICH KEY
lua <<EOF
require'which-key'.setup{
  plugins = {
    marks = true, -- shows a list of your marks on ' and `
    registers = true, -- shows your registers on " in NORMAL or <C-r> in INSERT mode
    -- the presets plugin, adds help for a bunch of default keybindings in Neovim
    -- No actual key bindings are created
    spelling = {
      enabled = true, -- enabling this will show WhichKey when pressing z= to select spelling suggestions
      suggestions = 20, -- how many suggestions should be shown in the list?
    },
    presets = {
      operators = true, -- adds help for operators like d, y, ...
      motions = true, -- adds help for motions
      text_objects = true, -- help for text objects triggered after entering an operator
      windows = true, -- default bindings on <c-w>
      nav = true, -- misc bindings to work with windows
      z = true, -- bindings for folds, spelling and others prefixed with z
      g = true, -- bindings for prefixed with g
    },
  },
  -- add operators that will trigger motion and text object completion
  -- to enable all native operators, set the preset / operators plugin above
  operators = { gc = "Comments" },
  key_labels = {
    -- override the label used to display some keys. It doesn't effect WK in any other way.
    -- For example:
    -- ["<space>"] = "SPC",
    -- ["<cr>"] = "RET",
    -- ["<tab>"] = "TAB",
  },
  motions = {
    count = true,
  },
  icons = {
    breadcrumb = "»", -- symbol used in the command line area that shows your active key combo
    separator = "➜", -- symbol used between a key and it's label
    group = "+", -- symbol prepended to a group
  },
  popup_mappings = {
    scroll_down = "<c-d>", -- binding to scroll down inside the popup
    scroll_up = "<c-u>", -- binding to scroll up inside the popup
  },
  window = {
    border = "double", -- none, single, double, shadow
    position = "bottom", -- bottom, top
    margin = { 1, 0, 1, 0 }, -- extra window margin [top, right, bottom, left]
    padding = { 1, 2, 1, 2 }, -- extra window padding [top, right, bottom, left]
    winblend = 0, -- value between 0-100 0 for fully opaque and 100 for fully transparent
  },
  layout = {
    height = { min = 4, max = 50 }, -- min and max height of the columns
    width = { min = 20, max = 90 }, -- min and max width of the columns
    spacing = 3, -- spacing between columns
    align = "left", -- align columns left, center or right
  },
  ignore_missing = false, -- enable this to hide mappings for which you didn't specify a label
  hidden = { "<silent>", "<cmd>", "<Cmd>", "<CR>", "^:", "^ ", "^call ", "^lua " }, -- hide mapping boilerplate
  show_help = true, -- show a help message in the command line for using WhichKey
  show_keys = true, -- show the currently pressed key and its label as a message in the command line
  triggers = "auto", -- automatically setup triggers
  -- triggers = {"<leader>"} -- or specifiy a list manually
  -- list of triggers, where WhichKey should not wait for timeoutlen and show immediately
  triggers_nowait = {
    -- marks
    "`",
    "'",
    "g`",
    "g'",
    -- registers
    '"',
    "<c-r>",
    -- spelling
    "z=",
  },
  triggers_blacklist = {
    -- list of mode / prefixes that should never be hooked by WhichKey
    -- this is mostly relevant for keymaps that start with a native binding
    i = { "j", "k" },
    v = { "j", "k" },
  },
  -- disable the WhichKey popup for certain buf types and file types.
  -- Disabled by deafult for Telescope
  disable = {
    buftypes = {},
    filetypes = {},
  },
}
EOF
"--- Plugins of interest
" Plug 'nvim-lua/plenary.nvim'
" vim asterisk
" vimspector (debugger)
"tpope/vim-projectionist
" Plug 'nvim-lua/plenary.nvim'
" Plug 'folke/todo-comments.nvim'
" harpoon
" telescope

" lua <<EOF
" require('lspconfig').tsserver.setup({
"    on_attach = lsp_attach,
"    capabilities = lsp_capabilities,
" })
" EOF

" TREESITTER
lua <<EOF
require'nvim-treesitter.configs'.setup {
   -- A list of parser names, or "all"
  ensure_installed = "all",
  --ignore_install = { "verilog", "cmake", "vim" },

  -- Install parsers synchronously (only applied to `ensure_installed`)
  sync_install = false,

  -- Automatically install missing parsers when entering buffer
  auto_install = false,

  -- List of parsers to ignore installing (for "all")
  --- ignore_install = { "javascript" },
  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,
  },
}
EOF

" need to do a TSInstal <lang> on initial install/config
"lua <<EOF
"  require"nvim-treesitter.highlight".set_custom_captures {
"    -- Highlight the comment capture group with the "" highlight group.
"    -- let vanilla vim/polyglot handle those highlights
"    ["comment"] = "",
"    ["string"] = "",
"  }
"EOF

" ===Plugings to look into===
"tpope/vim-projectionist
" Plug 'nvim-lua/plenary.nvim'
" Plug 'folke/todo-comments.nvim'


"--------APPEARANCE-----------------------
hi VertSplit ctermbg=black ctermfg=black
" set guifont=hack
set t_Co=256
set background=dark
set hlsearch
syntax on
set nocompatible
set hidden
" original, material, or mix
let g:gruvbox_material_foreground="original"

if (has("termguicolors"))
  set termguicolors
endif

"fix for tmux changing the color scheme
" set t_ut=
"


"-----------------------------------------
"--------BEHAVIOR-----------------------
set ignorecase
set smartcase
" only set when performing redraw intensive actions
" set lazyredraw
set ttyfast
set nowrap
set noswapfile
set foldmethod=indent
set foldignore=
set foldcolumn=0
" set foldmethod=expr
" set foldexpr=nvim_treesitter#foldexpr()
set norelativenumber
set number
set wildmenu
set wildmode=list:longest,full
set wildignore=*.o,tags,*~   "Don't show object files, etc when tab-completing
set tags=./tags,tags;$HOME
"diable scratch
set completeopt-=preview
" don't scan included files or tags, slow im vim8
" set complete-=i
" set complete-=t
set splitright
set splitbelow
set mouse=a
set autoread
" au CursorHold,CursorHoldI * checktime "time to trigger autoread
set timeoutlen=500
set ttimeoutlen=5
set noautochdir
set path+=**
set backspace=indent,eol,start  " more powerful backspacing
set shortmess-=F "needed to get nvim filetype autocmds working,
set cursorline


" Update the count when cursor is idle in command or insert mode.
" Update when idle for 1000 msec (default is 4000 msec).
set updatetime=100
set viewoptions=cursor,folds,curdir " options for vim-stay
set clipboard+=unnamedplus
set undodir=~/.undodir//
set undofile
set undolevels=10000
set history=10000

set directory+=,~/tmp,$TMP
set writebackup
set backup
set backupdir=~/.backup//

"---------------------------------------
"--------INDENT SETTINGS--------------------
filetype plugin indent on
" SHOW EXISTING TAB WITH SPACES WIDTH
set tabstop=3
" WHEN INDENTING WITH '>', USE SPACES WIDTH
set shiftwidth=3
" ON PRESSING TAB, INSERT SPACES
set expandtab
set smarttab
set cin "C-style indentation"
set ai "autoindent"
"---------------------------------------

"--------NETRW--------------------
let g:netrw_banner=0
let g:netrw_liststyle=3
"---------------------------------------

"---------KEY-REMAPS--------------------
let mapleader=" "
let maplocalleader=" "

" remap needed to prevent mouse functions from inserting characters
nnoremap <esc>^[ <esc>^[

"-----mouse scroll wheel------
nnoremap <ScrollWheelUp> <C-Y>
nnoremap <C-ScrollWheelUp> <C-U>
nnoremap <S-ScrollWheelUp> <C-B>

nnoremap <ScrollWheelDown> <C-E>
nnoremap <C-ScrollWheelDown> <C-D>
nnoremap <S-ScrollWheelDown> <C-F>

inoremap <ScrollWheelUp> <C-Y>
inoremap <C-ScrollWheelUp> <C-U>
inoremap <S-ScrollWheelUp> <C-B>

inoremap <ScrollWheelDown> <C-E>
inoremap <C-ScrollWheelDown> <C-D>
inoremap <S-ScrollWheelDown> <C-F>

vnoremap <ScrollWheelUp> <C-Y>
vnoremap <C-ScrollWheelUp> <C-U>
vnoremap <S-ScrollWheelUp> <C-B>

vnoremap <ScrollWheelDown> <C-E>
vnoremap <C-ScrollWheelDown> <C-D>
vnoremap <S-ScrollWheelDown> <C-F>
"-----------------------------

nnoremap <C-RightMouse> *Nzz
vnoremap <C-RightMouse> :<C-U>call <SNR>19_VSetSearch('/')<CR>/<C-R>=@/<CR><CR>Nzz
inoremap <C-RightMouse> *Nzz

set pastetoggle=<F3>

command! W w


"---------KEY-REMAPS-PLUGINS---------

"---------FZF------------
nmap <leader><tab> <plug>(fzf-maps-n)
xmap <leader><tab> <plug>(fzf-maps-x)
omap <leader><tab> <plug>(fzf-maps-o)
" nmap <leader> i <plug>(fzf-maps-n)


"---------SEARCHHI------------
nmap n <Plug>(searchhi-n)
nmap N <Plug>(searchhi-N)
nmap * <Plug>(searchhi-*)
nmap g* <Plug>(searchhi-g*)
nmap # <Plug>(searchhi-#)
nmap g# <Plug>(searchhi-g#)
" nmap gd <Plug>(searchhi-gd)
" nmap gD <Plug>(searchhi-gD)

vmap n <Plug>(searchhi-v-n)
vmap N <Plug>(searchhi-v-N)
" vmap * <Plug>(searchhi-v-*)
vmap g* <Plug>(searchhi-v-g*)
" vmap # <Plug>(searchhi-v-#)
vmap g# <Plug>(searchhi-v-g#)
" vmap gd <Plug>(searchhi-v-gd)
" vmap gD <Plug>(searchhi-v-gD)

" nmap <silent> <C-L> <Plug>(searchhi-clear-all)
" vmap <silent> <C-L> <Plug>(searchhi-v-clear-all)

let g:searchhi_user_autocmds_enabled = 1
let g:searchhi_redraw_before_on = 1


" noremap <C-G> 1<C-G>

" Seamlessly treat visual lines as actual lines when moving around.
noremap j gj
noremap k gk
noremap <Down> gj
noremap <Up> gk
inoremap <Down> <C-o>gj
inoremap <Up> <C-o>gk

"-------HARPOON--------
nnoremap <silent> <leader>y :lua require("harpoon.mark").add_file()<CR>:echo expand('%:t') "added to harpoon"<CR>
nnoremap <silent> <leader>h :lua require("harpoon.ui").toggle_quick_menu()<CR>
nnoremap <silent> <leader>H :lua require("harpoon.ui").nav_file(1)<CR>
nnoremap <silent> <leader>J :lua require("harpoon.ui").nav_file(2)<CR>
nnoremap <silent> <leader>K :lua require("harpoon.ui").nav_file(3)<CR>
nnoremap <silent> <leader>L :lua require("harpoon.ui").nav_file(4)<CR>
nnoremap <silent> <leader>j :lua require("harpoon.ui").nav_next()<CR>
nnoremap <silent> <leader>k :lua require("harpoon.ui").nav_prev()<CR>

"----------TABS---------------
" Go to tab by number
noremap <silent> <leader>1 1gt
noremap <silent> <leader>2 2gt
noremap <silent> <leader>3 3gt
noremap <silent> <leader>4 4gt
noremap <silent> <leader>5 5gt
noremap <silent> <leader>6 6gt
noremap <silent> <leader>7 7gt
noremap <silent> <leader>8 8gt
noremap <silent> <leader>9 9gt
noremap <silent> <leader>0 :tablast<CR>

"cycle through tabs
noremap <silent> <leader>p gT
noremap <silent> <leader>n gt
noremap <silent> <leader>d :q<CR>
noremap <silent> <M-Left> gT
noremap <silent> <M-Right> gt
"move tab location
noremap <silent> <S-M-Left>  :tabm -1<CR>
noremap <silent> <S-M-Right> :tabm +1<CR>

"new tab
noremap <silent> <leader>t :tabnew<CR>
noremap <silent> <leader>T :tabclose<CR>

"gimme terminal
noremap <silent> <leader>S :terminal<CR>

" move lines with alt j/k
nnoremap <A-j> :m .+1<CR>==
nnoremap <A-k> :m .-2<CR>==
inoremap <A-j> <Esc>:m .+1<CR>==gi
inoremap <A-k> <Esc>:m .-2<CR>==gi
vnoremap <A-j> :m '>+1<CR>gv=gv
vnoremap <A-k> :m '<-2<CR>gv=gv

" nnoremap <silent> <C-[> :redraw!<CR>

nnoremap <silent> <C-l> :vertical resize -5<CR>
nnoremap <silent> <C-h> :vertical resize +5<CR>
" nnoremap <silent> <C-k> :resize +5<CR>
" nnoremap <silent> <C-j> :resize -5<CR>

noremap <silent> <S-Right> :vertical resize -5<CR>
noremap <silent> <S-Left> :vertical resize +5<CR>
noremap <silent> <S-Up> :resize +5<CR>
noremap <silent> <S-Down> :resize -5<CR>

noremap <silent> <Right> :vertical resize -1<CR>
noremap <silent> <Left> :vertical resize +1<CR>
noremap <silent> <Up> :resize +1<CR>
noremap <silent> <Down> :resize -1<CR>

nnoremap <leader>z <C-w>_ \| <C-w>\|

" Go to last active tab
au TabLeave * let g:lasttab = tabpagenr()
" nnoremap <silent> <leader>L :exe "tabn ".g:lasttab<CR>
" vnoremap <silent> <leader>L :exe "tabn ".g:lasttab<CR>

" Cycle through splits.
" nnoremap <S-Tab> <C-w>w

" noremap <leader>y "*y
" noremap <leader>p "*p

noremap <leader>Y :let @+=expand('%:p')<CR>

" buffer navigation
nnoremap <leader>N :bn<CR>
nnoremap <leader>P :bp<CR>
nnoremap <leader>w :bn<CR>
nnoremap <leader>q :bp<CR>
nnoremap <leader>D :bd<CR>
nnoremap <leader>b :Buffers <CR>

" reverse selected string
vnoremap ;rv c<C-O>:set revins<CR><C-R>"<Esc>:set norevins<CR>

function! LastTab()
   call feedkeys("\g\<Tab>")
endfunction

func! MyRedir() abort
    redir! > ~/test.txt
    :ls
    redir END
endfunc

augroup save_files | au!
    au VimLeave * call MyRedir()
augroup end


function! SavePaths( path )
   let files = filter(map(range(1,bufnr('$')), 'bufname(v:val)'), '!empty(v:val)')
   call writefile(files, a:path )
endfunction

" --------------vim-peekaboo--------------------
" let g:peekaboo_window = "vert bo 40new"

" --------------floaterm--------------------
let g:floaterm_opener = 'edit'
let g:floaterm_width = 0.9
let g:floaterm_height = 0.9

" nnoremap <leader>a :set nomore <Bar> :pwd <Bar> :set more <CR>:cd<Space>

nnoremap <leader>f :Files
nnoremap <leader>ff :Files
nnoremap <leader>fs :Files ~/.scripts/
nnoremap <leader>fc :Files ~/.config/
nnoremap <leader>l :Lines

" search for selection
" fugitive sfite
" nnoremap <leader>v :vert G<CR>
" nnoremap <leader>gh :Gclog<CR>
" nnoremap <leader>gl :G log<CR>


" lazygit floaterm fugitive replacement
nnoremap <leader>v :vert G<CR>
" nnoremap <leader>v :FloatermNew lazygit<CR>
" nnoremap <leader>V :LazyGitCurrentFile<CR>
" nnoremap <leader>gh :Gclog<CR>
" nnoremap <leader>gl :G log<CR>

" -- fix so that grepper can see buffers that are loaded by haven't been visited
" nnoremap <leader>s :cex []<CR> :silent bufdo vimgrepadd // % <Left><Left><Left>
" nnoremap <leader>a :cex []<CR> :silent bufdo vimgrepadd /<C-r><C-w>/ %<CR>

" fugitive follow symlinks
nnoremap <leader>x :<C-u>execute 'file '.fnameescape(resolve(expand('%:p')))<bar>
    \ call FugitiveDetect(fnameescape(expand('%:p:h')))<CR>

"---------fzf----------------
" An action can be a reference to a function that processes selected lines
" function! s:build_quickfix_list(lines)
"   call setqflist(map(copy(a:lines), '{ "filename": v:val }'))
"   copen
"   cc
" endfunction

" let g:fzf_action = {
"   \ 'ctrl-q': function('s:build_quickfix_list'),
"   \ 'ctrl-t': 'tab split',
"   \ 'ctrl-x': 'split',
"   \ 'ctrl-v': 'vsplit' }


"Press * to search for the term under the cursor or a visual selection and
" then press a key below to replace all instances of it in the current file.
nnoremap <leader>C :bufdo %s///g<Left><Left>
nnoremap <leader>c :%s///g<Left><Left>

nnoremap <leader>s :cfdo %s///g<Left><Left>

" The usere as above but instead of acting on the whole file it will be
" restricted to the previously visually selected range. You can do that by
" pressing *, visually selecting the range you want it to apply to and then
" press a key below to replace all instances of it in the current selection.
"xnoremap <Leader>r :s///g<Left><Left>
"xnoremap <Leader>rc :s///gc<Left><Left><Left>

" Type a replacement term and press . to repeat the replacement again.
"Useful
" for replacing a few instances of the term (comparable to multiple
"cursors).
" nnoremap <silent> s* :let @/='\<'.expand('<cword>').'\>'<CR>cgn
" xnoremap <silent> s* "sy:let @/=@s<CR>cgn

" Prevent x from overriding what's in the clipboard.
noremap x "_x
noremap X "_x

" Prevent selecting and pasting from overwriting what you originally copied.
xnoremap p pgvy

" Keep cursor at the bottom of the visual selection after you yank it.
vmap y ygv<Esc>

"----Rename tmux window to filename-----
function! Ren()
   let cmd = "tmux rename-window " . expand("%:t")
   call system(cmd)
endfunction

nnoremap <silent> <leader>R :call Ren()<CR>

"-----InentLine-------------------------
let g:indentLine_concealcursor = 'nc'
let g:indentLine_conceallevel = 1
let g:indentLine_enabled = 1
let g:indentLine_char_list = ['|', '¦', '┆', '┊']

"-------GREPPER---------
" nnoremap gs  <plug>(GrepperOperator)
nnoremap <leader>g :Grepper -dir cwd
nnoremap <leader>G :Grepper -buffers

" the g:grepper dict will be appended to once plugin has loaded, after vim
"  sources this file, our changes will be kept
let g:grepper = {
   \ 'dir': 'cwd,file',
   \ 'tools' : ['grep'],
   \ 'grep': {
   \   'grepprg': 'grep -RIn --exclude=tags --exclude-dir=.git $* .',
   \ }}

"--------NERDTREE----------------------
nnoremap <leader>e :NERDTreeToggle<CR>

" Open the existing NERDTree on each new tab.
" autocmd BufWinEnter * if getcmdwintype() == '' | silent NERDTreeMirror | endif

"--------HighlightedYank-------------------------------
if !exists('##TextYankPost')
   map y <Plug>(highlightedyank)
endif
let g:highlightedyank_highlight_duration = 1000
let g:highlightedyank_highlight_in_visual = 1
" highlight HighlightedyankRegion ctermbg=214 ctermfg=0 guibg=214 guifg=0
highlight! link HighlightedyankRegion WarningFloat

function! HighYank()
   highlight link HighlightedyankRegion WarningFloat
endfunction

" augroup highlightedYankGroup
"    autocmd!
"    autocmd UIEnter * call HighYank()
" augroup END


"source this file
command! Source :source ~/.config/nvim/init.vim
command! Edit :e ~/.config/nvim/init.vim
command! Notes :e /home/sam/srpvm191/notes/TODO_GENERAL.txt

nnoremap <leader><leader>e :Edit<CR>
nnoremap <leader><leader>n :Notes<CR>

function! ThreeHorizontalWindows()
   wincmd h
   wincmd h
   wincmd K
   wincmd j
   wincmd l
   wincmd J
   wincmd k
endfunction

function! DiffgetFile(LR)
   let l:prevlastline = 0
   let l:curlastline = line("$")

   " until the last line stops changing after diffget, i.e no more changes
   while l:curlastline != l:prevlastline
      let l:prevlastline= line("$")

      call setpos("'<",[0,1,1])
      call setpos("'>",[0,l:curlastline,1])

      if a:LR == 'R'
         '<,'>diffget REMOTE
      else
         '<,'>diffget LOCAL
      endif

      let l:curlastline = line("$")
   endwhile

endfunction

function! DiffgetVisual(r,l1,l2,LR) abort
   " if no range supplied
   if a:r == 0
      if a:LR == 'R'
         diffget REMOTE
      else
         diffget LOCAL
      endif
   " if range supplied
   else
      call setpos("'<",[0,a:l1,1])
      call setpos("'>",[0,a:l2,1])
      echo "start line: " . a:l1
      echo "end line: " . a:l2
      if a:LR == 'R'
         '<,'>diffget REMOTE
      else
         '<,'>diffget LOCAL
      endif
   endif
endfunction

" do a three way fugitive merge
command! GM :Gdiffsplit!
command! Gt :diffget //2
command! Gm :diffget //3

command! Gl :diffget LOCAL
command! Gr :diffget REMOTE

command! -range GR :call DiffgetVisual(<range>,<line1>,<line2>,"R")
command! -range GL :call DiffgetVisual(<range>,<line1>,<line2>,"L")

command! GGRR :call DiffgetFile("R")
command! GGLL :call DiffgetFile("L")

command! TH :call ThreeHorizontalWindows()

nnoremap <leader><leader>ggr :GGRR<CR>
nnoremap <leader><leader>ggl :GGLL<CR>

nnoremap <leader><leader>gl :GL<CR>
nnoremap <leader><leader>gr :GR<CR>
vnoremap <leader><leader>gl :GL<CR>
vnoremap <leader><leader>gr :GR<CR>


nnoremap <leader><leader>gt :Gt<CR>
nnoremap <leader><leader>gm :Gm<CR>
vnoremap <leader><leader>gt :Gt<CR>
vnoremap <leader><leader>gm :Gm<CR>

command! RPS :!tmux set-environment cur_dir %:p:h \; neww bash -c "~/.scripts/rsync_vm.sh PUSH"
command! RPL :!tmux set-environment cur_dir %:p:h \; neww bash -c "~/.scripts/rsync_vm.sh PULL"

nnoremap <leader>u :RPS<CR>
nnoremap <leader>U :RPL<CR>

nnoremap <leader><leader>w :wq<CR>
nnoremap <leader><leader>W :wqa<CR>


" do tmux stuff
command! VCT   :!~/.scripts/vim_control_tmux.sh

nnoremap <F6> :VCT<CR>

nnoremap <F7> :UndotreeToggle<CR>
"Remove all trailing whitespace by pressing F5
function! RemoveTrailingWhitespace()
   let _s=@/|
   %s/\s\+$//e|
   let @/=_s|
endfunction
nnoremap <F5> :let _s=@/<Bar>:%s/\s\+$//e<Bar>:let @/=_s<Bar><CR>
"map <F8> :checktime<CR>
" autocmd BufWritePre * %s/\s\+$//e

nnoremap <F8> :!lualatex --output-format=pdf %<CR>

command! -complete=shellcmd -nargs=+ Shell call s:RunShellCommand(<q-args>)

" function! TabHi()
"    highlight!  TabNum     cterm=bold  ctermfg=208  ctermbg=240
"    highlight!  TabNumSel  cterm=bold  ctermfg=208  ctermbg=246
"    highlight!  WinNum     cterm=bold  ctermfg=223  ctermbg=240
"    highlight!  WinNumSel  cterm=bold  ctermfg=223  ctermbg=240
" endfunction

" needed for old tabliine highlighting
" augroup tabhi
"    autocmd!
"    autocmd TabNew * call TabHi()
"    autocmd SourcePost * call TabHi()
"    " autocmd TabEnter * call TabHi()
"    " autocmd TabNewEntered * call TabHi()
" augroup END


"FZF Buffer Delete

function! s:list_buffers()
  redir => list
  silent ls
  redir END
  return split(list, "\n")
endfunction

function! s:delete_buffers(lines)
  execute 'bwipeout!' join(map(a:lines, {_, line -> split(line)[0]}))
endfunction

command! BD call fzf#run(fzf#wrap({
  \ 'source': s:list_buffers(),
  \ 'sink*': { lines -> s:delete_buffers(lines) },
  \ 'options': '--multi --reverse --bind ctrl-a:select-all+accept'
\ }))

" ---------------BETTER TRADITIONAL TABLINE-----------------------
if exists("+showtabline")

" Rename tabs to show tab number.
" (Based on http://stackoverflow.com/questions/5927952/whats-implementation-of-vims-default-tabline-function)

function! MyTabLine()
    let s = ''
    let t = tabpagenr()
    let i = 1
    while i <= tabpagenr('$')
        let buflist = tabpagebuflist(i)
        let winnr = tabpagewinnr(i)
        let s .= '%' . i . 'T'
        let s .= (i == t ? '%1*' : '%2*')

        " let s .= (i == t ? '%#TabLineSel#' : '%#TabLine#')
        " let s .= ' '
        " let s .= (i == t ? '%#TabNumSel#' : '%#TabNum#')
        let s .= (i == t ? '%#CocErrorFloat#' : '%#CocErrorFloat#')
        let s .= ' ' . i . ''
        let s .= (i == t ? '%#CocWarningFloat#' : '%#CocInfoFloat#')

        let bufnr = buflist[winnr - 1]
        let file = bufname(bufnr)
        let buftype = getbufvar(bufnr, '&buftype')

        if buftype == 'help'
            let file = 'help:' . fnamemodify(file, ':t:r')

        elseif buftype == 'quickfix'
            let file = 'quickfix'

        elseif buftype == 'nofile'
            if file =~ '\/.'
                let file = substitute(file, '.*\/\ze.', '', '')
            endif

        else
            let file = pathshorten(fnamemodify(file, ':t'))
            if getbufvar(bufnr, '&modified')
                let file = '+' . file
            endif

        endif

        if file == ''
            let file = '[No Name]'
        endif

        let s .= ' ' . file

        let nwins = tabpagewinnr(i, '$')
        if nwins > 1
            let modified = ''
            for b in buflist
                if getbufvar(b, '&modified') && b != bufnr
                    let modified = '*'
                    break
                endif
            endfor
            let hl = (i == t ? '%#CocWarningFloat#' : '%#CocInfoFloat#')
            let nohl = (i == t ? '%#CocWarningFloat#' : '%#CocInfoFloat#')
            let s .= ' ' . modified . '(' . nohl . winnr . nohl . '/' . nwins . ')'
        endif

        if i < tabpagenr('$')
            let s .= ' %#CocInfoFloat#|'
        else
            let s .= ' '
        endif

        let i = i + 1

    endwhile

    let s .= '%T%#CocInfoFloat#%='
    let s .= (tabpagenr('$') > 1 ? '%999XX' : 'X')
    return s
endfunction
" let Black=0
" let DarkBlue=1
" let DarkGreen=2
" let DarkCyan=3
" let DarkRed=4
" let DarkMagenta=5
" let Brown=6
" let LightGray=7
" let DarkGray=8
" let Blue=9
" let Green=10
" let Cyan=11
" let Red=12
" let Magenta=13
" let Yellow=14
" let White=15

"
" TabLine        xxx ctermfg=223 ctermbg=240 guifg=#ebdbb2 guibg=#504945
" TabLineSel     xxx ctermfg=235 ctermbg=246 guifg=#282828 guibg=#a89984
" TabLineFill    xxx ctermfg=223 ctermbg=236 guifg=#ebdbb2 guibg=#32302f

set showtabline=1

set tabline=%!MyTabLine()

endif " exists("+showtabline")
"----------------------------------------------------------------------------



"---------------STATUSLINE---------------------------

function! CurrentDir()
   return fnamemodify(execute('pwd'), ":t")
endfunction

function! CurrentServer()
   " return v:servername
   return ""
endfunction

function! RangerLevel()
   return system("echo -n $RANGER_LEVEL")
endfunction

command! CD :cd %:p:h

function! FileNameStatus()
   if g:fullpath == '0'
      return expand('%:t')
   elseif g:fullpath == '1'
      return resolve(expand('%:t'))
   elseif g:fullpath == '2'
      return resolve(expand('%:p:.'))
   else
      return resolve(expand('%:p'))
   endif
endfunction

function! FullPathToggle()
   if g:fullpath == '0'
      let g:fullpath = '1'
   elseif g:fullpath == '1'
      let g:fullpath = '2'
   elseif g:fullpath == '2'
      let g:fullpath = '3'
   else
      let g:fullpath = '0'
   endif
endfunction

let g:git_status_line_counter = 0
let g:git_status_cached = ""

function! StatuslineGit()
   return FugitiveStatusline()[5:15]
endfunction

" function! StatuslineGit()
"    if (g:git_status_line_counter % 3) == 0
"       let g:git_status_cached = FugitiveStatusline()[5:15]
"    endif
"    let g:git_status_line_counter = (g:git_status_line_counter + 1) % 3
"    return g:git_status_cached
"    " return l:branch[0:15]
"    " return (len(l:branch) > 15 ? l:branch[0:15] : l:branch)
" endfunction



command! FullPathToggle call FullPathToggle()

let g:fullpath = '1'

set statusline=
set statusline+=%#CocHintFloat#
" set statusline+=\[%{StatuslineGit()}\]
set statusline+=%{StatuslineGit()}
set statusline+=%#CocWarningFloat#\ %{FileNameStatus()}
" set statusline+=%#CocWarningFloat#\ %{%FileNameStatus()%}
set statusline+=%m
set statusline+=%=
set statusline+=%#CocHintFloat#
set statusline+=\(%{anzu#search_status()}\)
set statusline+=\[%{CurrentDir()}\]
set statusline+=\ %y
" set statusline+=\ %{&fileencoding?&fileencoding:&encoding}
"set statusline+=\[%{&fileformat}\]
set statusline+=\ %p%%
set statusline+=\ %l:%c
" set statusline+=\ (%{CurrentServer()}\)
" set statusline+=\ {R:%{RangerLevel()}\}
set laststatus=2

"tabline is setup in .config/nvim/plugin/custom_tabline.vim

" function! RangerNerd()
"    vs
"    let $NO_CLOSE=""
"    let $SERVER_NAME=v:servername
"    let g:ranger_command_override = 'ranger --cmd "set column_ratios 1,1"'
"    RangerWorkingDirectoryServer
"    wincmd H
"    vert res 60
"    set winfixwidth
"    set winfixheight
"    let g:ranger_command_override = 'ranger'
" endfunction

" function! RangerNerdNoClose()
"    vs
"    let $SERVER_NAME=v:servername
"    let $NO_CLOSE=1
"    let g:ranger_command_override = 'ranger --cmd "set column_ratios 1,1"'
"    " maybe use this
"    " call termopen(s:ranger_command . ' --choosefiles=' . s:choice_file_path . ' "' . currentPath . '"', rangerCallback)
"    terminal ranger
"    wincmd H
"    vert res 50
"    set winfixwidth
"    set winfixheight
"    startinsert
"    let g:ranger_command_override = 'ranger'
" endfunction

" " --- Ranger config
" " let g:NERDTreeHijackNetrw = 0  " add this line if you use NERDTree
" let g:ranger_replace_netrw = 0 " open ranger when vim open a directory
" let g:ranger_command_override = 'ranger --cmd "set column_ratios 1,1"'
" " let g:ranger_command_override = 'ranger'


" " nnoremap <leader>e :call RangerNerdNoClose()<CR>

" let g:ranger_map_keys = 0
" nnoremap <leader>r :FloatermNew ranger<CR>
" " nnoremap <leader>r :FloatermNew ranger `cwd`<CR>
" nnoremap <leader>R :Ranger<CR>
" " nnoremap <leader>R :RangerWorkingDirectory<CR>

" command! RangerWorkingDirectoryServer call OpenRangerIn(".", 'silent ! SERVER_NAME='. v:servername . ' ~/.scripts/edit_remote.sh ')

" leave terminal mode with escape
tnoremap <Esc> <C-\><C-n>




function! TimeStamp()
   call system('date > ~/date.txt')
   r ~/date.txt
endfunction
command! -bar TimeStamp call TimeStamp()
nnoremap <leader>T :<C-U>TimeStamp<CR>

function! s:RunShellCommand(cmdline)
   echo a:cmdline
   let expanded_cmdline = a:cmdline
   for part in split(a:cmdline, ' ')
      if part[0] =~ '\v[%#<]'
         let expanded_part = fnameescape(expand(part))
         let expanded_cmdline = substitute(expanded_cmdline, part, expanded_part, '')
      endif
   endfor
   botright new
   setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap
   call setline(1, 'You entered:    ' . a:cmdline)
   call setline(2, 'Expanded Form:  ' .expanded_cmdline)
   call setline(3,substitute(getline(2),'.','=','g'))
   execute '$read !'. expanded_cmdline
   1
endfunction

function! Get_visual_selection()
   let [line_start, column_start] = getpos("'<")[1:2]
   let [line_end, column_end] = getpos("'>")[1:2]
   let lines = getline(line_start, line_end)
   if len(lines) == 0
      return ''
   endif
   let lines[-1] = lines[-1][: column_end - (&selection == 'inclusive' ? 1 : 2)]
   let lines[0] = lines[0][column_start -1:]
   return join(lines, "\n")
endfunction

function! StripVisualSelection ( string )
   let string=a:string
   let string = substitute(string, '\v', '', '' )
   return string
endfunction


"-------------AUGROUP-AUTOCMDS-------------------------

" autocmd BufWritePost ~/.config/nvim/*.vim source % | echom "update init.vim and friends "| redraw

augroup searchhi
    autocmd!
    autocmd User SearchHiOn AnzuUpdateSearchStatusOutput
    autocmd User SearchHiOff echo g:anzu_no_match_word
augroup END

augroup vimrc
  autocmd!
  autocmd BufWinEnter,Syntax * syn sync minlines=500 maxlines=500
augroup END

" persistent fold
augroup AutoSaveFolds
   autocmd!
   " autocmd BufWinLeave * silent! mkview
   autocmd BufLeave * silent! mkview
   autocmd BufWinEnter * silent! loadview
augroup END

function! SetupLog()
   setlocal tabstop=2
   setlocal shiftwidth=2
endfunction

augroup log_group
   autocmd!
   autocmd FileType log call SetupLog()
augroup END


function! SetupText()
   setlocal tabstop=2
   setlocal shiftwidth=2
endfunction

augroup text_group
   autocmd!
   autocmd FileType txt call SetupText()
augroup END

function! SetupYaml()
   setlocal tabstop=2
   setlocal shiftwidth=2
endfunctio

augroup yaml_group
   autocmd!
   autocmd FileType yaml call SetupYaml()
augroup END

augroup bean_group
   autocmd!
   autocmd FileType beancount setlocal shiftwidth=2  tabstop=2
augroup END

function! SetupRuby()
   setlocal shiftwidth=3  tabstop=3
   setlocal nocindent smartindent autoindent
   filetype indent on
   set foldmethod=indent
   setlocal foldignore=
   set indentexpr=GetRubyIndent(v:lnum)
endfunction

augroup ruby_group
   autocmd!
   autocmd FileType ruby call SetupRuby()
   autocmd FileType rspec call SetupRuby()
augroup END

function! SetupC()
   set colorcolumn=120
   set textwidth=120
   call css_color#init('hex', 'extended', 'cComment,cCommentL,cString,cCppString')
   " c header
   if expand('%:e') ==? 'h'
      set ft=c
   endif
   " cpp header
   " if expand('%:e') =~? '\v^h%(pp|h|\+\+|xx)?$'
   "  " your script here
   " endif
endfunction

augroup c_group
   autocmd!
   autocmd FileType c call SetupC()
augroup END

function! SetupCpp()
   set colorcolumn=120
   set textwidth=120
endfunction

augroup cpp_group
   autocmd!
   autocmd FileType cpp call SetupCpp()
augroup END

function! SetupMake()
   setlocal noexpandtab
endfunction

augroup make_group
   autocmd!
   autocmd FileType make call SetupMake()
augroup END

function! SpaceBeforeChar( char )
   exe '%s/' . '\([^ \\]\)' . a:char . '/' . '\1 ' . a:char . '/g'
endfunction

function! SpaceAfterChar( char )
   exe '%s/' . a:char . '\([^ \\]\)/' . a:char . ' \1/g'
endfunction

" need to set colorscheme as late as possible due to
"  syntax.vim needing to be sourced first I think
autocmd VimEnter * colorscheme gruvbox-material```
@ipod825
Copy link
Owner

ipod825 commented May 7, 2023

I can't reproduce after syncing all dependencies. If it still persist, please provide the git commit sha hash for
ranger.nvim
plenary
libp

@samuelfite
Copy link
Author

samuelfite commented May 11, 2023

[14:35]sam@fedora: ~/.../plugged/ranger.nvim (main)$ git log | head -n 3
commit a4aa897
Author: Shih-Ming Wang [email protected]
Date: Sat Apr 15 19:32:34 2023 -0700

[14:36]sam@fedora: ~/.../plugged/plenary.nvim (master)$ git log | head -n 3
commit 9ac3e9541bbabd9d73663d757e4fe48a675bb054
Author: James Trew [email protected]
Date: Mon Apr 10 06:24:03 2023 -0400

[14:36]sam@fedora: ~/.../plugged/libp.nvim (main)$ git log | head -n 3
commit db62a17ad68946d970bca0b0736e854058d3b307
Author: Shih-Ming Wang [email protected]
Date: Sat Apr 15 19:31:31 2023 -0700
[14:36]sam@fedora: ~/.../plugged/libp.nvim (main)$

@ipod825
Copy link
Owner

ipod825 commented May 13, 2023

Seems the same versions as me.
I tried to use your whole init.vim but there are other errors that causing problems.
Please provide a minimum init.vim so that I can easily reproduce it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants