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

Neovim sessions not automatically restored upon prefix + Ctrl-r #470

Open
eisukeesaki opened this issue Feb 5, 2023 · 6 comments · May be fixed by #534
Open

Neovim sessions not automatically restored upon prefix + Ctrl-r #470

eisukeesaki opened this issue Feb 5, 2023 · 6 comments · May be fixed by #534

Comments

@eisukeesaki
Copy link

eisukeesaki commented Feb 5, 2023

When I execute the tmux-resurrect's restore command, the tmux windows and panes are restored as expected, however neovim sessions are not automatically restored despite having set -g @resurrect-strategy-nvim 'session' in .tmux.conf and Session.vims in the current directories. I would have to restore neovim sessions by manually executing nvim -S.

environment

relevant configuration files

neovim plugins

plug.vim

if has("nvim")
  let g:plug_home = stdpath('data') . '/plugged'
endif

call plug#begin()

if has("nvim")
  Plug 'tpope/vim-fugitive'
  Plug 'tpope/vim-rhubarb'
  Plug 'hoob3rt/lualine.nvim'
  Plug 'nvim-lua/plenary.nvim'
  Plug 'onsails/lspkind.nvim'
  Plug 'hrsh7th/cmp-buffer'
  Plug 'hrsh7th/cmp-nvim-lsp'
  Plug 'hrsh7th/nvim-cmp'
  Plug 'neovim/nvim-lspconfig'
  Plug 'jose-elias-alvarez/null-ls.nvim'
  Plug 'MunifTanjim/prettier.nvim'
  Plug 'williamboman/mason.nvim'
  Plug 'williamboman/mason-lspconfig.nvim'
  Plug 'glepnir/lspsaga.nvim'
  Plug 'L3MON4D3/LuaSnip'
  Plug 'nvim-treesitter/nvim-treesitter', { 'do': ':TSUpdate' }
  Plug 'kyazdani42/nvim-web-devicons'
  Plug 'nvim-telescope/telescope.nvim'
  " 'nvim-telescope/telescope-file-browser.nvim'
  Plug 'windwp/nvim-autopairs'
  Plug 'windwp/nvim-ts-autotag'
  Plug 'norcalli/nvim-colorizer.lua'
  " 'folke/zen-mode.nvim'
  " "iamcco/markdown-preview.nvim",
  " 'akinsho/nvim-bufferline.lua'
  " 'lewis6991/gitsigns.nvim'
  " 'dinhhuy258/git.nvim' -- For git blame & browse

  " Plug 'williamboman/nvim-lsp-installer'
  Plug 'kristijanhusak/defx-git'
  Plug 'kristijanhusak/defx-icons'
  Plug 'Shougo/defx.nvim', { 'do': ':UpdateRemotePlugins' }
  " Plug 'folke/lsp-colors.nvim'
  " Plug 'nvim-lua/popup.nvim'
  Plug 'tpope/vim-commentary'
  Plug 'jeetsukumaran/vim-indentwise'
  " Plug 'vimwiki/vimwiki'
  Plug 'tpope/vim-obsession'
  " Plug 'tpope/vim-sleuth'
  " Plug 'posva/vim-vue'
  " Plug 'jparise/vim-graphql'
  " Plug 'christoomey/vim-tmux-navigator'
  " Plug 'anuvyklack/pretty-fold.nvim'
  Plug 'pseewald/vim-anyfold'
endif

Plug 'groenewege/vim-less', { 'for': 'less' }

call plug#end()

init.vim

" Fundamentals "{{{
" ---------------------------------------------------------------------

" init autocmd
autocmd!
" set script encoding
scriptencoding utf-8
" stop loading config if it's on tiny or small
if !1 | finish | endif

set nocompatible
set number
syntax enable
set fileencodings=utf-8,sjis,euc-jp,latin
set encoding=utf-8
set title
" set autoindent
set background=dark
set nobackup
set hlsearch
set showcmd
set cmdheight=1
set laststatus=2
set scrolloff=10
set expandtab
"let loaded_matchparen = 1
set shell=fish
set backupskip=/tmp/*,/private/tmp/*

" incremental substitution (neovim)
if has('nvim')
  set inccommand=split
endif

" Suppress appending <PasteStart> and <PasteEnd> when pasting
set t_BE=

set nosc noru nosm
" Don't redraw while executing macros (good performance config)
set lazyredraw
"set showmatch
" How many tenths of a second to blink when matching brackets
"set mat=2
" Ignore case when searching
set ignorecase
" Be smart when using tabs ;)
set smarttab
" indents
filetype plugin indent on
set shiftwidth=4
set tabstop=4
set ai "Auto indent
set si "Smart indent
set nowrap "No Wrap lines
set backspace=start,eol,indent
" Finding files - Search down into subfolders
set path+=**
set wildignore+=*/node_modules/*

set number

augroup numbertoggle
  autocmd!
  autocmd BufEnter,FocusGained,InsertLeave,WinEnter * if &nu && mode() != "i" | set rnu   | endif
  autocmd BufLeave,FocusLost,InsertEnter,WinLeave   * if &nu                  | set nornu | endif
augroup END

" Turn off paste mode when leaving insert
autocmd InsertLeave * set nopaste

set shortmess=I

"}}}

" Highlights "{{{
" ---------------------------------------------------------------------
" set nohlsearch
set cursorline
"set cursorcolumn

" Set cursor line color on visual mode
highlight Visual cterm=NONE ctermbg=236 ctermfg=NONE guibg=Grey40

highlight LineNr cterm=none ctermfg=240 guifg=#2b506e guibg=#000000

augroup BgHighlight
  autocmd!
  autocmd WinEnter * set cul
  autocmd WinLeave * set nocul
augroup END

if &term =~ "screen"
  autocmd BufEnter * if bufname("") !~ "^?[A-Za-z0-9?]*://" | silent! exe '!echo -n "\ek[`hostname`:`basename $PWD`/`basename %`]\e\\"' | endif
  autocmd VimLeave * silent!  exe '!echo -n "\ek[`hostname`:`basename $PWD`]\e\\"'
endif

"}}}

" File types "{{{
" ---------------------------------------------------------------------
" autocmd BufNewFile,BufRead * if expand('%:t') !~ '\.' | setlocal shiftwidth=4 | endif
" autocmd BufNewFile,BufRead * if expand('%:t') !~ '\.' | set syntax=markdown | endif
au BufNewFile,BufRead * if !expand('%:t') | setlocal shiftwidth=4 | endif
au BufNewFile,BufRead * if &syntax == '' | setlocal shiftwidth=4 | endif
au BufNewFile,BufRead * if &buftype == '' | setlocal shiftwidth=4 | endif

" JavaScript
au BufNewFile,BufRead *.es6 setf javascript
" TypeScript
au BufNewFile,BufRead *.tsx setf typescriptreact
" Markdown
au BufNewFile,BufRead *.md set filetype=markdown
au BufNewFile,BufRead *.mdx set filetype=markdown
" Flow
au BufNewFile,BufRead *.flow set filetype=javascript
" Fish
au BufNewFile,BufRead *.fish set filetype=fish

set suffixesadd=.js,.es,.jsx,.json,.css,.less,.sass,.styl,.php,.py,.md

autocmd FileType json setlocal shiftwidth=2 tabstop=2
autocmd FileType javascript setlocal shiftwidth=2 tabstop=2
autocmd FileType typescriptreact setlocal shiftwidth=2 tabstop=2
autocmd FileType typescript setlocal shiftwidth=2 tabstop=2
autocmd FileType markdown setlocal shiftwidth=4 tabstop=4
autocmd FileType sql setlocal shiftwidth=4 tabstop=4
autocmd FileType vue setlocal shiftwidth=2 tabstop=2
autocmd FileType html setlocal shiftwidth=2 tabstop=2
autocmd FileType css setlocal shiftwidth=2 tabstop=2

"}}}

" Imports "{{{
" ---------------------------------------------------------------------
runtime ./plug.vim
if has("unix")
  let s:uname = system("uname -s")
  " Do Mac stuff
  if s:uname == "Darwin\n"
    runtime ./macos.vim
  endif
endif
if has('win32')
  runtime ./windows.vim
endif

runtime ./maps.vim
runtime ./commands.vim
"}}}

" Syntax theme "{{{
" ---------------------------------------------------------------------

" true color
if exists("&termguicolors") && exists("&winblend")
  syntax enable
  set termguicolors
  set winblend=0
  set wildoptions=pum
  set pumblend=5
  set background=dark
  " Use NeoSolarized
  let g:neosolarized_termtrans=1
  runtime ./colors/NeoSolarized.vim
  colorscheme NeoSolarized
endif

"}}}

" LSP Diagnostic "{{{
" ---------------------------------------------------------------------
autocmd BufEnter * lua vim.diagnostic.disable()

" Extras "{{{
" ---------------------------------------------------------------------
set exrc
set signcolumn=yes
"}}}
"
" vim: set foldmethod=marker foldlevel=0:

" Add asterisks in block comments
" set formatoptions-=cro

autocmd Filetype * setlocal formatoptions-=cro

" let g:vimwiki_key_mappings = { 'all_maps': 0, }

let g:vimwiki_key_mappings =
  \ {
  \   'all_maps': 1,
  \   'global': 1,
  \   'headers': 1,
  \   'text_objs': 1,
  \   'table_format': 1,
  \   'table_mappings': 0,
  \   'lists': 1,
  \   'links': 1,
  \   'html': 1,
  \   'mouse': 0,
  \ }

.tmux.conf

set -g default-terminal "xterm-256color"
#set -ga terminal-overrides ",*256col*:Tc"
set -ga terminal-overrides ",xterm-256color:Tc"
# action key
unbind C-b
unbind C-z
set-option -g prefix C-t
set-option -g repeat-time 0

#### Key bindings
set-window-option -g mode-keys vi
set-window-option -g xterm-keys on
# set -g terminal-overrides "screen*:kLFT5=\eOD:kRIT5=\eOC:kUP5=\eOA:kDN5=\eOB:smkx@:rmkx@"

#bind t send-key C-t
# Reload settings
bind r source-file ~/.tmux.conf \; display "Reloaded!"
# Open current directory
bind o run-shell "open #{pane_current_path}"
bind -r e kill-pane -a

# vim-like pane switching
# bind -r k select-pane -U 
# bind -r j select-pane -D 
# bind -r h select-pane -L 
# bind -r l select-pane -R 

# move pane focus
bind-key -n C-Left select-pane -L
bind-key -n C-Right select-pane -R
bind-key -n C-Down select-pane -D
bind-key -n C-Up select-pane -U

# vim-tmux-navigator
# Smart pane switching with awareness of Vim splits.
# See: https://github.com/christoomey/vim-tmux-navigator
# is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
#     | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
# bind-key -n 'C-h' if-shell "$is_vim" 'send-keys C-h'  'select-pane -L'
# bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j'  'select-pane -D'
# bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k'  'select-pane -U'
# bind-key -n 'C-l' if-shell "$is_vim" 'send-keys C-l'  'select-pane -R'
# tmux_version='$(tmux -V | sed -En "s/^tmux ([0-9]+(.[0-9]+)?).*/\1/p")'
# if-shell -b '[ "$(echo "$tmux_version < 3.0" | bc)" = 1 ]' \
#     "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\'  'select-pane -l'"
# if-shell -b '[ "$(echo "$tmux_version >= 3.0" | bc)" = 1 ]' \
#     "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\\\'  'select-pane -l'"
# bind-key -T copy-mode-vi 'C-Left' select-pane -L
# bind-key -T copy-mode-vi 'C-Down' select-pane -D
# bind-key -T copy-mode-vi 'C-Up' select-pane -U
# bind-key -T copy-mode-vi 'C-Right' select-pane -R
# bind-key -T copy-mode-vi 'C-\' select-pane -l

# find and select window by index name
# bind-key C-S-, command-prompt -W -p index "select-window -t ':%%'"
# bind-key -n C-S-i command-prompt -W -p index "select-window -t ':%%'"

# creaate new window
# bind-key -n C-S-n new-window

# Moving window
bind-key -n C-S-Down swap-window -t -1 \; previous-window
bind-key -n C-S-Up swap-window -t +1 \; next-window

# next/previous-window
bind-key -n C-S-Left previous-window
bind-key -n C-S-Right next-window

# Resizing pane
# bind -r C-k resize-pane -U 5
# bind -r C-j resize-pane -D 5
# bind -r C-h resize-pane -L 5
# bind -r C-l resize-pane -R 5

# switch to window by index name
# bind-key C-S-w command-prompt "select-window %%"


#### basic settings

set-option -g status-justify "left"
#set-option utf8-default on
#set-option -g mouse-select-pane
set-window-option -g mode-keys vi
#set-window-option -g utf8 on
# look'n feel
set-option -g status-fg cyan
set-option -g status-bg black
set -g pane-active-border-style fg=colour166,bg=default
set -g window-style fg=colour10,bg=default
set -g window-active-style fg=colour12,bg=default
set-option -g history-limit 64096

set -sg escape-time 10

#### COLOUR

# default statusbar colors
set-option -g status-style bg=colour235,fg=colour136,default

# default window title colors
set-window-option -g window-status-style fg=colour244,bg=colour234,dim

# active window title colors
set-window-option -g window-status-current-style fg=colour166,bg=default,bright

# pane border
set-option -g pane-border-style fg=colour235 #base02
set-option -g pane-active-border-style fg=colour136,bg=colour235

# message text
set-option -g message-style bg=colour235,fg=colour166

# pane number display
set-option -g display-panes-active-colour colour33 #blue
set-option -g display-panes-colour colour166 #orange

# clock
set-window-option -g clock-mode-colour colour64 #green

# allow the title bar to adapt to whatever host you connect to
set -g set-titles on
set -g set-titles-string "#T"

# import
if-shell "uname -s | grep -q Darwin" "source ~/.tmux.conf.osx"

# Powerline
source ~/.tmux.powerline.conf

# plugins
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @plugin 'tmux-plugins/tmux-yank'

## plugin options
set -g @resurrect-strategy-nvim 'session'
set -g @resurrect-processes 'nvim'
# set -g @continuum-restore 'on'
# set -g @resurrect-capture-pane-contents 'on' # this causes tmux server to crash upon tmux-resurrect.restore
# set -g default-command "reattach-to-user-namespace -l $SHELL" # this does not work

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'

fish config

set fish_greeting ""

set -gx TERM xterm-256color

# theme
# set -g CLICOLOR 1
set -g theme_color_scheme terminal-dark
set -g fish_prompt_pwd_dir_length 1
set -g theme_display_user yes
set -g theme_hide_hostname no
set -g theme_hostname always

# aliases
## ls 
alias l "ls -p -G"
alias la "ls -A"
alias ll "ls -l"
alias llsm "ll --sort=modified"
alias lla "ll -A"
alias llasm "lla --sort=modified"
## others
alias c "cd"
alias ex "exit"
alias gr "grep"
alias f "find"
alias c "clear"
alias tm "tmux"
alias v "nvim"
alias g "git"
alias ide $HOME/.config/.ide
alias ide2 $HOME/.config/.ide2
alias sph $HOME/.config/.tmux.split-window-horizontal
alias sv $HOME/.config/.tmux.split-window-vertical
alias sv75 $HOME/.config/.tmux.split-window-vertical-75
alias sv3 $HOME/.config/.tmux.3-equal-v-splits
alias sp6 $HOME/.config/tmux.6-panes
alias n "node"
alias vsc "/Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin/code"
alias t "tsc"
alias tn "ts-node"
alias ash "aws-shell"

set -gx HOMEBREW_LOG_FILE /usr/local/var/log/homebrew.log

set -gx EDITOIR nvim
#set -gx PAGER nvim

set -gx PATH bin $PATH
set -gx PATH ~/bin $PATH
set -gx PATH ~/.local/bin $PATH

set -gx PATH node_modules/.bin $PATH

# pyenv
# I'll configure this next time I use pyenv
pyenv init - | source

# Node.js
set -gx PATH $HOME/.nvm/versions/node/v16.13.1/bin $PATH

# Kaleidoscope
set -gx KALEIDOSCOPE_DIR $HOME/atreus/Kaleidoscope

# TODO: config to prevent closing terminal when ^d is pressed

set -gx PATH /usr/local/Cellar/v8/10.6.194.18/bin $PATH

switch (uname)
  case Darwin
    source (dirname (status --current-filename))/config-osx.fish
  case Linux
    source (dirname (status --current-filename))/config-linux.fish
end

set LOCAL_CONFIG (dirname (status --current-filename))/config-local.fish
if test -f $LOCAL_CONFIG
  source $LOCAL_CONFIG
end
@lunics
Copy link

lunics commented Feb 13, 2023

Same error, when it runs nvim -S ~/path/session.vim I got E484: Can't read the file "~/path/session.vim"
The session.vim file is unreadable 0 byte but it has rwx and more than 0 byte from the filesystem
tmux-resurrect repo seems not pulled since the 26 June, the problem comes from neovim I suppose.

update: After some research when I create a new nvim session via tpope/vim-obsession pluggin (:mksesions! /path/sesion.vim) the file becomes broken.

update: Ok everything works except nvim -S /path/sesssion.vim, I downgraded neovim from archlinux and it works

@me-nkr
Copy link

me-nkr commented Oct 3, 2023

Same problem, nvim -S Session.vim works but no automatic restoring on prefix + <C-r>

@jessun
Copy link

jessun commented Jan 17, 2024

Same issue, has it been resolved now?

@edte
Copy link

edte commented Feb 2, 2024

Same issue

@devgony
Copy link

devgony commented Jan 8, 2025

Same issue.
And i don't even get whether using vim-obsession is mandatory or not.

@me-nkr
Copy link

me-nkr commented Jan 8, 2025

Same issue. And i don't even get whether using vim-obsession is mandatory or not.

@devgony ( I really hope I am not just info dumping what you already know ) vim-obsession is not mandatory to create vim sessions, you can use :mksession. But vim-obsession does make it easy to track session since you activate it once and can forget about it until you want to pause tracking session, where you will have to call :mksession every time you want to update the session with current file.

And one possible reason that the neovim session not getting restored could be because you're using an appimage of neovim, I'd suggest taking a look at #530

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

Successfully merging a pull request may close this issue.

6 participants