У меня есть привычка мышечной памяти набирать «: q!», Которую я не смог стряхнуть.Это становится очень утомительным, если у меня открыто несколько буферов в сеансе vi.Итак, мне нужен был способ просто прийти в себя, когда я случайно выстрелил себе в ногу.Опять же.
Это немного усложняется тем фактом, что у меня может быть открыто несколько сеансов ssh одновременно, каждый с разным набором буферов / окон, открытых в vi.Мне нужен был способ сохранения сеанса отдельно для каждого отдельного сеанса ssh.
Решение, которое я придумал, основано на ответе 2ck и заключается в следующем.В вашем ~ / .vimrc:
" tty is unique to the ssh session
let my_full_tty=$SSH_TTY
" scoop the number off the end of it
let my_tty_num = matchstr(my_full_tty, '\d\{1,}$')
" create a unique filename
let g:my_vim_session = "~/vim_session." . my_tty_num
fu! SaveSess()
execute 'mksession! ' . g:my_vim_session
endfunction
fu! RestoreSess()
let file = expand(g:my_vim_session)
if filereadable(file)
execute 'source ' . g:my_vim_session
endif
endfunction
autocmd VimLeave * call SaveSess()
" only restore the session if the user has -not- requested a specific filename
autocmd VimEnter * if !argc() | call RestoreSess() | endif
Но, конечно, я не хочу загружать ~ / vim_session.?валяется, поэтому я периодически убираю.(Я могу переосмыслить это, на самом деле, потому что, что произойдет, если мой ssh неожиданно отключится? Хммм)
В вашем .bashrc:
trap ~/bash_exit_script.pl EXIT
и в bash_exit_script.pl:
#! /usr/bin/perl
use warnings;
use strict;
my $ssh_tty = $ENV{SSH_TTY};
$ssh_tty =~ /(\d{1,}$)/;
my $my_tty_number = $1;
my $filename = "/home/dominic.pain/vim_session.$my_tty_number";
if(-e $filename) {
print "tried to remove $filename...\n";
system("rm $filename");
}
else {
print "Couldn't find $filename\n";
}