mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-03-26 12:10:32 +08:00
feat(layer): add enable_tmux_clipboard
option
close https://github.com/SpaceVim/SpaceVim/issues/3670
This commit is contained in:
parent
e1dfadeea5
commit
71d78fae3c
@ -9,13 +9,23 @@
|
|||||||
""
|
""
|
||||||
" @section tmux, layers-tmux
|
" @section tmux, layers-tmux
|
||||||
" @parentsection layers
|
" @parentsection layers
|
||||||
" Adds integration between tmux and vim panes. Switch between panes
|
" `tmux` layer adds integration between tmux and vim panes. Switch between panes
|
||||||
" seamlessly.syntax highlighting, commenting, man page navigation
|
" seamlessly, syntax highlighting, commenting, man page navigation
|
||||||
" and ability to execute lines as tmux commands.
|
" and ability to execute lines as tmux commands.
|
||||||
" This layer is not added by default. To include it, add
|
" This layer is not added by default. To include it, add following to spacevim
|
||||||
" `SpaceVim#layers#load('tmux')` to your `~/.SpaceVim.d/init.vim`.
|
" configuration file:
|
||||||
|
" >
|
||||||
|
" [[layers]]
|
||||||
|
" name = 'tmux'
|
||||||
|
" <
|
||||||
" If you are having issues with <C-h> in a neovim buffer, see
|
" If you are having issues with <C-h> in a neovim buffer, see
|
||||||
" `https://github.com/neovim/neovim/issues/2048#issuecomment-78045837`
|
"
|
||||||
|
" https://github.com/neovim/neovim/issues/2048#issuecomment-78045837
|
||||||
|
"
|
||||||
|
" @subsection Layer options
|
||||||
|
"
|
||||||
|
" `enable_tmux_clipboard`: this option is used to enable or disable tmux
|
||||||
|
" clipboard, by default this option is `false`.
|
||||||
"
|
"
|
||||||
" @subsection mappings
|
" @subsection mappings
|
||||||
" >
|
" >
|
||||||
@ -27,12 +37,18 @@
|
|||||||
" <C-l> normal Switch to vim/tmux pane in right direction
|
" <C-l> normal Switch to vim/tmux pane in right direction
|
||||||
" <
|
" <
|
||||||
|
|
||||||
|
if exists('s:enable_tmux_clipboard')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:enable_tmux_clipboard = 0
|
||||||
|
|
||||||
function! SpaceVim#layers#tmux#plugins() abort
|
function! SpaceVim#layers#tmux#plugins() abort
|
||||||
let plugins = [
|
let plugins = [
|
||||||
\ ['christoomey/vim-tmux-navigator', { 'on_cmd': [
|
\ ['christoomey/vim-tmux-navigator', { 'on_cmd': [
|
||||||
\ 'TmuxNavigateLeft', 'TmuxNavigateDown', 'TmuxNavigateUp',
|
\ 'TmuxNavigateLeft', 'TmuxNavigateDown', 'TmuxNavigateUp',
|
||||||
\ 'TmuxNavigateRight'] }],
|
\ 'TmuxNavigateRight'] }],
|
||||||
\ ]
|
\ ]
|
||||||
call add(plugins, ['tmux-plugins/vim-tmux', {'on_ft' : 'tmux'}])
|
call add(plugins, ['tmux-plugins/vim-tmux', {'on_ft' : 'tmux'}])
|
||||||
call add(plugins, ['edkolev/tmuxline.vim', {'merged' : 0}])
|
call add(plugins, ['edkolev/tmuxline.vim', {'merged' : 0}])
|
||||||
return plugins
|
return plugins
|
||||||
@ -47,6 +63,11 @@ function! SpaceVim#layers#tmux#config() abort
|
|||||||
autocmd FocusLost * set nocursorline | redraw!
|
autocmd FocusLost * set nocursorline | redraw!
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
|
if s:enable_tmux_clipboard
|
||||||
|
call s:Enable()
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
if s:tmux_navigator_modifier ==# 'alt'
|
if s:tmux_navigator_modifier ==# 'alt'
|
||||||
nnoremap <silent> <M-h> :TmuxNavigateLeft<CR>
|
nnoremap <silent> <M-h> :TmuxNavigateLeft<CR>
|
||||||
nnoremap <silent> <M-j> :TmuxNavigateDown<CR>
|
nnoremap <silent> <M-j> :TmuxNavigateDown<CR>
|
||||||
@ -138,13 +159,18 @@ function! SpaceVim#layers#tmux#set_variable(var) abort
|
|||||||
let s:tmux_navigator_modifier = get(a:var,
|
let s:tmux_navigator_modifier = get(a:var,
|
||||||
\ 'tmux_navigator_modifier',
|
\ 'tmux_navigator_modifier',
|
||||||
\ s:tmux_navigator_modifier)
|
\ s:tmux_navigator_modifier)
|
||||||
|
let s:enable_tmux_clipboard = get(a:var,
|
||||||
|
\ 'enable_tmux_clipboard',
|
||||||
|
\ s:enable_tmux_clipboard)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
function! SpaceVim#layers#tmux#get_options() abort
|
function! SpaceVim#layers#tmux#get_options() abort
|
||||||
|
|
||||||
return ['tmuxline_separators', 'tmuxline_separators_alt', 'tmux_navigator_modifier']
|
return ['tmuxline_separators',
|
||||||
|
\ 'tmuxline_separators_alt',
|
||||||
|
\ 'tmux_navigator_modifier',
|
||||||
|
\ 'enable_tmux_clipboard']
|
||||||
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@ -153,3 +179,56 @@ function! SpaceVim#layers#tmux#health() abort
|
|||||||
call SpaceVim#layers#tmux#config()
|
call SpaceVim#layers#tmux#config()
|
||||||
return 1
|
return 1
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
func! s:get_tmux_name() abort
|
||||||
|
let list = systemlist('tmux list-buffers -F"#{buffer_name}"')
|
||||||
|
if len(list)==0
|
||||||
|
return ''
|
||||||
|
else
|
||||||
|
return list[0]
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func! s:get_tmux_buf() abort
|
||||||
|
return system('tmux show-buffer')
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func! s:Enable() abort
|
||||||
|
|
||||||
|
if $TMUX==''
|
||||||
|
" not in tmux session
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:lastbname = ''
|
||||||
|
|
||||||
|
" if support TextYankPost
|
||||||
|
if exists('##TextYankPost')==1
|
||||||
|
" @"
|
||||||
|
augroup SpaceVim_layer_tmux
|
||||||
|
autocmd FocusLost * call s:update_from_tmux()
|
||||||
|
autocmd FocusGained * call s:update_from_tmux()
|
||||||
|
autocmd TextYankPost * silent! call system('tmux loadb -',join(v:event["regcontents"],"\n"))
|
||||||
|
augroup END
|
||||||
|
let @" = s:get_tmux_buf()
|
||||||
|
else
|
||||||
|
" vim doesn't support TextYankPost event
|
||||||
|
" This is a workaround for vim
|
||||||
|
augroup SpaceVim_layer_tmux
|
||||||
|
autocmd FocusLost * silent! call system('tmux loadb -',@")
|
||||||
|
autocmd FocusGained * let @" = s:get_tmux_buf()
|
||||||
|
augroup END
|
||||||
|
let @" = s:get_tmux_buf()
|
||||||
|
endif
|
||||||
|
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func! s:update_from_tmux() abort
|
||||||
|
let buffer_name = s:get_tmux_name()
|
||||||
|
if s:lastbname != buffer_name
|
||||||
|
let @" = s:get_tmux_buf()
|
||||||
|
endif
|
||||||
|
let s:lastbname=s:get_tmux_name()
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
call s:Enable()
|
||||||
|
@ -4142,12 +4142,22 @@ MAPPINGS
|
|||||||
==============================================================================
|
==============================================================================
|
||||||
TMUX *SpaceVim-layers-tmux*
|
TMUX *SpaceVim-layers-tmux*
|
||||||
|
|
||||||
Adds integration between tmux and vim panes. Switch between panes
|
`tmux` layer adds integration between tmux and vim panes. Switch between panes
|
||||||
seamlessly.syntax highlighting, commenting, man page navigation and ability to
|
seamlessly, syntax highlighting, commenting, man page navigation and ability
|
||||||
execute lines as tmux commands. This layer is not added by default. To include
|
to execute lines as tmux commands. This layer is not added by default. To
|
||||||
it, add `SpaceVim#layers#load('tmux')` to your `~/.SpaceVim.d/init.vim`. If
|
include it, add following to spacevim configuration file:
|
||||||
you are having issues with <C-h> in a neovim buffer, see
|
>
|
||||||
`https://github.com/neovim/neovim/issues/2048#issuecomment-78045837`
|
[[layers]]
|
||||||
|
name = 'tmux'
|
||||||
|
<
|
||||||
|
If you are having issues with <C-h> in a neovim buffer, see
|
||||||
|
|
||||||
|
https://github.com/neovim/neovim/issues/2048#issuecomment-78045837
|
||||||
|
|
||||||
|
LAYER OPTIONS
|
||||||
|
|
||||||
|
`enable_tmux_clipboard`: this option is used to enable or disable tmux
|
||||||
|
clipboard, by default this option is `false`.
|
||||||
|
|
||||||
MAPPINGS
|
MAPPINGS
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user