mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-01-23 13:00:04 +08:00
feat(history)!: use history plugin instead of shada
can not fix https://github.com/neovim/neovim/issues/6875 always get error when open two nvim instances
This commit is contained in:
parent
5ed5184a3d
commit
49fff62e21
@ -34,10 +34,7 @@ function! SpaceVim#autocmds#init() abort
|
|||||||
autocmd BufEnter,WinEnter,InsertLeave * setl cursorcolumn
|
autocmd BufEnter,WinEnter,InsertLeave * setl cursorcolumn
|
||||||
autocmd BufLeave,WinLeave,InsertEnter * setl nocursorcolumn
|
autocmd BufLeave,WinLeave,InsertEnter * setl nocursorcolumn
|
||||||
endif
|
endif
|
||||||
autocmd BufReadPost *
|
autocmd BufLeave * call SpaceVim#plugins#history#savepos()
|
||||||
\ if line("'\"") > 0 && line("'\"") <= line("$") |
|
|
||||||
\ exe "normal! g`\"" |
|
|
||||||
\ endif
|
|
||||||
autocmd BufNewFile,BufEnter * set cpoptions+=d " NOTE: ctags find the tags file from the current path instead of the path of currect file
|
autocmd BufNewFile,BufEnter * set cpoptions+=d " NOTE: ctags find the tags file from the current path instead of the path of currect file
|
||||||
autocmd BufWinLeave * let b:_winview = winsaveview()
|
autocmd BufWinLeave * let b:_winview = winsaveview()
|
||||||
autocmd BufWinEnter * if(exists('b:_winview')) | call winrestview(b:_winview) | endif
|
autocmd BufWinEnter * if(exists('b:_winview')) | call winrestview(b:_winview) | endif
|
||||||
@ -66,7 +63,12 @@ function! SpaceVim#autocmds#init() abort
|
|||||||
autocmd SessionLoadPost * let g:_spacevim_session_loaded = 1
|
autocmd SessionLoadPost * let g:_spacevim_session_loaded = 1
|
||||||
autocmd VimLeavePre * call SpaceVim#plugins#manager#terminal()
|
autocmd VimLeavePre * call SpaceVim#plugins#manager#terminal()
|
||||||
if has('nvim')
|
if has('nvim')
|
||||||
autocmd CursorHold,FocusGained,FocusLost * rshada|wshada
|
autocmd VimEnter,FocusGained * call SpaceVim#plugins#history#readcache()
|
||||||
|
autocmd FocusLost,VimLeave * call SpaceVim#plugins#history#writecache()
|
||||||
|
autocmd BufReadPost *
|
||||||
|
\ if line("'\"") > 0 && line("'\"") <= line("$") |
|
||||||
|
\ call SpaceVim#plugins#history#jumppos() |
|
||||||
|
\ endif
|
||||||
endif
|
endif
|
||||||
augroup END
|
augroup END
|
||||||
endfunction
|
endfunction
|
||||||
@ -89,7 +91,7 @@ function! s:reload_touchpad_status() abort
|
|||||||
if s:touchpadoff
|
if s:touchpadoff
|
||||||
call s:disable_touchpad()
|
call s:disable_touchpad()
|
||||||
endif
|
endif
|
||||||
endf
|
endfunction
|
||||||
function! s:disable_touchpad() abort
|
function! s:disable_touchpad() abort
|
||||||
let s:touchpadoff = 1
|
let s:touchpadoff = 1
|
||||||
call system('synclient touchpadoff=1')
|
call system('synclient touchpadoff=1')
|
||||||
|
@ -319,7 +319,9 @@ function! SpaceVim#layers#core#config() abort
|
|||||||
" TODO: fix all these command
|
" TODO: fix all these command
|
||||||
call SpaceVim#mapping#space#def('nnoremap', ['f', 't'], 'Defx', 'toggle-file-tree', 1)
|
call SpaceVim#mapping#space#def('nnoremap', ['f', 't'], 'Defx', 'toggle-file-tree', 1)
|
||||||
call SpaceVim#mapping#space#def('nnoremap', ['f', 'T'], 'Defx -no-toggle', 'show-file-tree', 1)
|
call SpaceVim#mapping#space#def('nnoremap', ['f', 'T'], 'Defx -no-toggle', 'show-file-tree', 1)
|
||||||
call SpaceVim#mapping#space#def('nnoremap', ['f', 'o'], "Defx -no-toggle -search=`expand('%:p')` `stridx(expand('%:p'), getcwd()) < 0? expand('%:p:h'): getcwd()`", 'open-file-tree', 1)
|
call SpaceVim#mapping#space#def('nnoremap', ['f', 'o'], 'call call('
|
||||||
|
\ . string(s:_function('s:defx_find_current_file')) . ', [])',
|
||||||
|
\ 'open-file-tree', 1)
|
||||||
call SpaceVim#mapping#space#def('nnoremap', ['b', 't'], 'exe "Defx -no-toggle " . fnameescape(expand("%:p:h"))', 'show-file-tree-at-buffer-dir', 1)
|
call SpaceVim#mapping#space#def('nnoremap', ['b', 't'], 'exe "Defx -no-toggle " . fnameescape(expand("%:p:h"))', 'show-file-tree-at-buffer-dir', 1)
|
||||||
elseif g:spacevim_filemanager ==# 'nvim-tree'
|
elseif g:spacevim_filemanager ==# 'nvim-tree'
|
||||||
call SpaceVim#mapping#space#def('nnoremap', ['f', 't'], 'NvimTreeToggle', 'toggle-file-tree', 1)
|
call SpaceVim#mapping#space#def('nnoremap', ['f', 't'], 'NvimTreeToggle', 'toggle-file-tree', 1)
|
||||||
@ -1067,6 +1069,21 @@ function! SpaceVim#layers#core#set_variable(var) abort
|
|||||||
\ 0)
|
\ 0)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! s:defx_find_current_file() abort
|
||||||
|
let current_file = s:FILE.unify_path(expand('%'), ':p')
|
||||||
|
let current_dir = s:FILE.unify_path(getcwd())
|
||||||
|
|
||||||
|
let command = "Defx -no-toggle -search=`expand('%:p')` "
|
||||||
|
if stridx(current_file, current_dir) < 0
|
||||||
|
let command .= expand('%:p:h')
|
||||||
|
else
|
||||||
|
let command .= getcwd()
|
||||||
|
endif
|
||||||
|
|
||||||
|
call execute(command)
|
||||||
|
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! SpaceVim#layers#core#get_options() abort
|
function! SpaceVim#layers#core#get_options() abort
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
@ -97,6 +97,7 @@ function! SpaceVim#layers#ui#plugins() abort
|
|||||||
\ 'EnableWhitespace'
|
\ 'EnableWhitespace'
|
||||||
\ ]}],
|
\ ]}],
|
||||||
\ ]
|
\ ]
|
||||||
|
call add(plugins, [g:_spacevim_root_dir . 'bundle/neomru.vim', {'merged' : 0}])
|
||||||
if (has('nvim-0.5.0') && s:NVIM_VERSION.is_release_version())
|
if (has('nvim-0.5.0') && s:NVIM_VERSION.is_release_version())
|
||||||
\ || has('nvim-0.6.0')
|
\ || has('nvim-0.6.0')
|
||||||
call add(plugins, [g:_spacevim_root_dir . 'bundle/indent-blankline.nvim',
|
call add(plugins, [g:_spacevim_root_dir . 'bundle/indent-blankline.nvim',
|
||||||
|
62
autoload/SpaceVim/plugins/history.vim
Normal file
62
autoload/SpaceVim/plugins/history.vim
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
"=============================================================================
|
||||||
|
" history.vim --- history manager
|
||||||
|
" Copyright (c) 2016-2019 Wang Shidong & Contributors
|
||||||
|
" Author: Wang Shidong < wsdjeg@outlook.com >
|
||||||
|
" URL: https://spacevim.org
|
||||||
|
" License: GPLv3
|
||||||
|
"=============================================================================
|
||||||
|
|
||||||
|
let s:FILE = SpaceVim#api#import('file')
|
||||||
|
let s:JSON = SpaceVim#api#import('data#json')
|
||||||
|
let s:LOG = SpaceVim#logger#derive('history')
|
||||||
|
let s:history_cache_path = s:FILE.unify_path(g:spacevim_data_dir, ':p') . 'SpaceVim/nvim_history.json'
|
||||||
|
let s:filepos = {}
|
||||||
|
|
||||||
|
function! SpaceVim#plugins#history#readcache() abort
|
||||||
|
call s:read_cache()
|
||||||
|
endfunction
|
||||||
|
function! SpaceVim#plugins#history#writecache() abort
|
||||||
|
call s:write_cache()
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! SpaceVim#plugins#history#jumppos() abort
|
||||||
|
let [l, c] = get(s:filepos, expand('%:p'), [0, 0])
|
||||||
|
if l != 0 && c != 0
|
||||||
|
call cursor(l, c)
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! SpaceVim#plugins#history#savepos() abort
|
||||||
|
call s:LOG.debug('save pos for:' . bufname())
|
||||||
|
let [_, l, c, _] = getpos('.')
|
||||||
|
call s:LOG.debug(printf('line %d, col %d', l, c))
|
||||||
|
if l != 0 && c != 0 && filereadable(bufname())
|
||||||
|
let s:filepos[expand('%:p')] = [l, c]
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function! s:read_cache() abort
|
||||||
|
if filereadable(s:history_cache_path)
|
||||||
|
let his = s:JSON.json_decode(join(readfile(s:history_cache_path, ''), ''))
|
||||||
|
if type(his) ==# type({})
|
||||||
|
call map(deepcopy(his.commands), 'histadd("cmd", v:val)')
|
||||||
|
let s:filepos = get(his, 'filepos', {})
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:write_cache() abort
|
||||||
|
let his = { 'commands' : [], 'filepos' : s:filepos}
|
||||||
|
for i in range(1, 100)
|
||||||
|
let cmd = histget('cmd', 0 - i)
|
||||||
|
if empty(cmd)
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
call add(his.commands, histget('cmd', i))
|
||||||
|
endfor
|
||||||
|
call writefile([s:JSON.json_encode(his)], s:history_cache_path)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
@ -7,6 +7,9 @@
|
|||||||
if exists('g:autoloaded_startify') || &compatible
|
if exists('g:autoloaded_startify') || &compatible
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
let s:FILE = SpaceVim#api#import('file')
|
||||||
|
|
||||||
let g:autoloaded_startify = 1
|
let g:autoloaded_startify = 1
|
||||||
|
|
||||||
" Function: #get_lastline {{{1
|
" Function: #get_lastline {{{1
|
||||||
@ -113,10 +116,6 @@ function! startify#insane_in_the_membrane(on_vimenter) abort
|
|||||||
let l:show_session = 1
|
let l:show_session = 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if empty(v:oldfiles)
|
|
||||||
call s:warn("Can't read viminfo file. Read :help startify-faq-02")
|
|
||||||
endif
|
|
||||||
|
|
||||||
let b:startify.section_header_lines = []
|
let b:startify.section_header_lines = []
|
||||||
|
|
||||||
let lists = s:get_lists()
|
let lists = s:get_lists()
|
||||||
@ -588,7 +587,7 @@ function! s:filter_oldfiles(path_prefix, path_format, use_env) abort
|
|||||||
let entries = {}
|
let entries = {}
|
||||||
let oldfiles = []
|
let oldfiles = []
|
||||||
|
|
||||||
for fname in v:oldfiles
|
for fname in neomru#_gather_file_candidates()
|
||||||
if counter <= 0
|
if counter <= 0
|
||||||
break
|
break
|
||||||
endif
|
endif
|
||||||
@ -599,7 +598,7 @@ function! s:filter_oldfiles(path_prefix, path_format, use_env) abort
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
try
|
try
|
||||||
let absolute_path = fnamemodify(resolve(fname), ":p")
|
let absolute_path = s:FILE.unify_path(resolve(fname), ":p")
|
||||||
catch /E655/ " Too many symbolic links (cycle?)
|
catch /E655/ " Too many symbolic links (cycle?)
|
||||||
call s:warn('Symlink loop detected! Skipping: '. fname)
|
call s:warn('Symlink loop detected! Skipping: '. fname)
|
||||||
continue
|
continue
|
||||||
@ -617,7 +616,7 @@ function! s:filter_oldfiles(path_prefix, path_format, use_env) abort
|
|||||||
let entry_path = s:transform(absolute_path)
|
let entry_path = s:transform(absolute_path)
|
||||||
endif
|
endif
|
||||||
if empty(entry_path)
|
if empty(entry_path)
|
||||||
let entry_path = fnamemodify(absolute_path, a:path_format)
|
let entry_path = s:FILE.unify_path(absolute_path, a:path_format)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let entries[absolute_path] = 1
|
let entries[absolute_path] = 1
|
||||||
@ -649,7 +648,7 @@ function! s:filter_oldfiles_unsafe(path_prefix, path_format, use_env) abort
|
|||||||
let oldfiles = []
|
let oldfiles = []
|
||||||
let is_dir = escape(s:sep, '\') . '$'
|
let is_dir = escape(s:sep, '\') . '$'
|
||||||
|
|
||||||
for fname in v:oldfiles
|
for fname in neomru#_gather_file_candidates()
|
||||||
if counter <= 0
|
if counter <= 0
|
||||||
break
|
break
|
||||||
endif
|
endif
|
||||||
@ -679,7 +678,7 @@ endfunction
|
|||||||
|
|
||||||
" Function: s:show_dir {{{1
|
" Function: s:show_dir {{{1
|
||||||
function! s:show_dir() abort
|
function! s:show_dir() abort
|
||||||
return s:display_by_path(getcwd() . s:sep, ':.', 0)
|
return s:display_by_path(s:FILE.unify_path(getcwd()), ':.', 0)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Function: s:show_files {{{1
|
" Function: s:show_files {{{1
|
||||||
|
@ -8,7 +8,7 @@ if exists("b:current_syntax")
|
|||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let s:sep = startify#get_separator()
|
let s:sep = '/'
|
||||||
let s:padding_left = repeat(' ', get(g:, 'startify_padding_left', 3))
|
let s:padding_left = repeat(' ', get(g:, 'startify_padding_left', 3))
|
||||||
|
|
||||||
syntax sync fromstart
|
syntax sync fromstart
|
||||||
|
@ -12,6 +12,7 @@ In `bundle/` directory, there are two kinds of plugins: forked plugins without c
|
|||||||
- [Changed plugin:](#changed-plugin)
|
- [Changed plugin:](#changed-plugin)
|
||||||
- [`core` layer](#core-layer)
|
- [`core` layer](#core-layer)
|
||||||
- [`edit` layer](#edit-layer)
|
- [`edit` layer](#edit-layer)
|
||||||
|
- [`ui` layer](#ui-layer)
|
||||||
- [No changed plugins](#no-changed-plugins)
|
- [No changed plugins](#no-changed-plugins)
|
||||||
- [`core` layer](#core-layer-1)
|
- [`core` layer](#core-layer-1)
|
||||||
- [`lsp` layer](#lsp-layer)
|
- [`lsp` layer](#lsp-layer)
|
||||||
@ -20,7 +21,6 @@ In `bundle/` directory, there are two kinds of plugins: forked plugins without c
|
|||||||
- [`lang#liquid` layer](#langliquid-layer)
|
- [`lang#liquid` layer](#langliquid-layer)
|
||||||
- [`lang#go` layer](#langgo-layer)
|
- [`lang#go` layer](#langgo-layer)
|
||||||
- [`tmux` layer](#tmux-layer)
|
- [`tmux` layer](#tmux-layer)
|
||||||
- [`ui` layer](#ui-layer)
|
|
||||||
- [`incsearch` layer](#incsearch-layer)
|
- [`incsearch` layer](#incsearch-layer)
|
||||||
- [`lang#java` layer](#langjava-layer)
|
- [`lang#java` layer](#langjava-layer)
|
||||||
- [`lang#plantuml` layer](#langplantuml-layer)
|
- [`lang#plantuml` layer](#langplantuml-layer)
|
||||||
@ -52,6 +52,9 @@ These plugins are changed based on a specific version of origin plugin.
|
|||||||
|
|
||||||
- `vim-grammarous`: based on [`rhysd/vim-grammarous@db46357`](https://github.com/rhysd/vim-grammarous/tree/db46357465ce587d5325e816235b5e92415f8c05)
|
- `vim-grammarous`: based on [`rhysd/vim-grammarous@db46357`](https://github.com/rhysd/vim-grammarous/tree/db46357465ce587d5325e816235b5e92415f8c05)
|
||||||
|
|
||||||
|
#### `ui` layer
|
||||||
|
|
||||||
|
- `vim-startify`: based on [`mhinz/vim-startify@4e089dffd`](https://github.com/mhinz/vim-startify/tree/4e089dffdad46f3f5593f34362d530e8fe823dcf)
|
||||||
|
|
||||||
### No changed plugins
|
### No changed plugins
|
||||||
|
|
||||||
@ -106,9 +109,6 @@ These plugins are changed based on a specific version of origin plugin.
|
|||||||
|
|
||||||
- [christoomey/vim-tmux-navigator@9ca5bfe5b](https://github.com/christoomey/vim-tmux-navigator/tree/9ca5bfe5bd274051b5dd796cc150348afc993b80)
|
- [christoomey/vim-tmux-navigator@9ca5bfe5b](https://github.com/christoomey/vim-tmux-navigator/tree/9ca5bfe5bd274051b5dd796cc150348afc993b80)
|
||||||
|
|
||||||
#### `ui` layer
|
|
||||||
|
|
||||||
- [`mhinz/vim-startify@81e36c35`](https://github.com/mhinz/vim-startify/tree/81e36c352a8deea54df5ec1e2f4348685569bed2)
|
|
||||||
|
|
||||||
#### `incsearch` layer
|
#### `incsearch` layer
|
||||||
|
|
||||||
|
@ -28,6 +28,8 @@ function M.options()
|
|||||||
|
|
||||||
vim.o.showcmd = false
|
vim.o.showcmd = false
|
||||||
|
|
||||||
|
vim.o.shada = ''
|
||||||
|
|
||||||
vim.o.autoindent = true
|
vim.o.autoindent = true
|
||||||
|
|
||||||
vim.o.linebreak = true
|
vim.o.linebreak = true
|
||||||
|
Loading…
Reference in New Issue
Block a user