@ldigas Eu acho que as pessoas se sentem mais à vontade para encontrar a pergunta aqui (com fonte grande, ótima formatação ...) do que em um fórum da velha escola ou em uma documentação de terminal ou, man
pro
6
@ldigas Eu, pessoalmente, sempre me assustei com as páginas de manual porque eles não fazem coisas suficientemente idiotas. Assim como tudo no linux, ele tem uma curva de aprendizado acentuada.
puk
45
@Idigas - Acho que você está perdendo o ponto que existe entre a inteligência coletiva de nós, o Google e o gerenciamento de conhecimento de pilha em excesso - essa é simplesmente a melhor maneira de obter suas respostas - o que você precisa, e não uma longa lista de opções esotéricas, também como esta página ilustra a experiência do mundo real de armadilhas e atalhos muito legais para facilitar sua vida. Isso se aplica igualmente a quase todos os manuais que eu olhei (exceto, talvez, o manual on-line do php). Viva stackoverflow!
ErichBSchulz
2
O @ldigas e as pessoas podem usá-lo para referência futura, pois outra pessoa pode precisar.
Mansuro 7/01/13
4
@idigas Acho que essas perguntas são reais no sentido de que um iniciante no vim não sabe muito sobre o sistema de ajuda e como usá-lo, mas se ficar mais experiente, saberá como encontrar o caminho no vim.
Edgar Klerks
Respostas:
494
Você quer algo como
:mksession ~/mysession.vim
Depois, você poderá obter esse arquivo vim e voltará a sua sessão antiga:
Ooo, e eu quase esqueci que você pode carregá-lo de volta, escrevendo: gvim -S ~ / mysession.vim
Benj
11
Obrigado @Benj. Eu sou novo no vim. Como posso 'fonte' na linha de comando?
Jogusa
11
Opa! Desculpe Benj, eu quis dizer modo de comando. Eu já o encontrei: ``: source ~ / mysession.vim´´.
Jogusa
8
Curto é: então ~ / arquivo. Se você deseja obter o arquivo atual de forma simples: o% fará o trabalho para você.
precisa saber é o seguinte
14
Se você não especificar um nome de arquivo de sessão, o padrão será gravar e ler Session.vim. Portanto, se você deseja salvar apenas uma sessão no diretório atual, pode usar :mksessionou :mksdo vim para salvar sua sessão atual e apenas vim -Sabri-la novamente.
Anishpatel 17/03/2015
59
Você pode querer definir essas opções de sessão no seu vimrc. Especialmente opções é irritante quando você altera seu vimrc depois de salvar a sessão.
set ssop-=options " do not store global and local values in a session
set ssop-=folds " do not store folds
Ótimo! Eu tive exatamente esse problema ontem. Muito obrigado!
Jogusa
40
Observe que: mksession não salvará as alterações nos arquivos que você fez. Cometi o erro de fechar o vim depois de salvar a sessão, assumindo que vou retomar a partir daí. Mas da próxima vez que abri a sessão, as alterações feitas nos arquivos haviam desaparecido.
Isso deve vir com qualquer resposta relacionada a :mksession.
Morgan Wilde
11
Sim, você provavelmente quer seguir com um:wqa
JonnyRaa 11/15
11
ou apenas :xaUm toque de tecla a menos. Yay!
robin
Você também pode configurar o vim para salvar automaticamente arquivos (se você gosta desse tipo de coisa) no seu .vimrc: vimrc au FocusLost * silent! wa Isso será salvo automaticamente sempre que o buffer perder o foco.
Grego
32
Se você usar o NERDTree como seu explorador de arquivos / traço, eu recomendaria o plug-in xolox / vim-session em vez do comando built-in: mksession. Por alguma razão,: mksession falha ao restaurar os buffers NERDTree. Sua milhagem pode variar, mas pensei em compartilhar minha experiência.
Para o macvim, preciso garantir: let g:nerdtree_tabs_open_on_gui_startup=0e let g:nerdtree_tabs_open_on_new_tab=0fazer com que o xolox / vim-session funcione.
Cada vez que você sai do Vim, ele salva a sessão atual ~/.vim/sessionse a carrega novamente quando o Vim é aberto. Também é baseado no seu caminho atual; portanto, se você abrir o Vim a partir de diretórios diferentes, terá sessões diferentes, o que é bastante útil ao trabalhar em projetos diferentes.
Apenas edite seu ~/.vimrcarquivo e adicione o seguinte:
function! MakeSession()
let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
if (filewritable(b:sessiondir) != 2)
exe 'silent !mkdir -p ' b:sessiondir
redraw!
endif
let b:filename = b:sessiondir . '/session.vim'
exe "mksession! " . b:filename
endfunction
function! LoadSession()
let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
let b:sessionfile = b:sessiondir . "/session.vim"
if (filereadable(b:sessionfile))
exe 'source ' b:sessionfile
else
echo "No session loaded."
endif
endfunction
" Adding automatons for when entering or leaving Vim
au VimEnter * nested :call LoadSession()
au VimLeave * :call MakeSession()
Mesmo para iniciantes, esse script é um pouco fácil de entender e personalizar.
Observe que este script só funcionará corretamente para sistemas Unix (MacOS / Linux), ele precisa ser adaptado para funcionar no Windows.
ATUALIZAÇÃO: Adicionando a sugestão de 0xc0de , você pode substituir a VimEnterlinha por essas se desejar que o Vim carregue a sessão apenas se nenhum argumento for fornecido :
if(argc() == 0)
au VimEnter * nested :call LoadSession()
endif
Você pode querer abrir a sessão apenas se nenhum argumento for fornecido para o vim, por exemplo. if argc() == 0 au VimEnter * nested :call LoadSession() end
0xc0de 17/08/2015
Obrigado @ 0xc0de, ótima sugestão (eu mesmo comecei a usá-lo). Eu atualizei a resposta.
Mathielo 17/08/2015
Como eu poderia modificar isso para que se eu vim aberto com argumentos também não salva a sessão
Dr. Manhattan
muito bom, mas o `exe 'source' b: sessionfile` precisa de um ponto aí? e o problema é que a sessão de carregamento automático depende do diretório inicial atual (passo a passo pwd) como posso defini-lo como o último diretório de trabalho antes de sair do vim? para que ele possa carregar a última sessão de trabalho em vez da sessão em ~/?
van abel
Se você quiser ter sessões, mas ainda abrir arquivos únicos no diretório sem substituí-lo, confira minha versão modificada na resposta separada: stackoverflow.com/questions/1642611/…
PMunch
6
Existe um plugin muito útil para esta tarefa, o vim-startify, que lida com muitas outras coisas, como arquivos abertos recentemente, etc; também possui uma interface muito fácil.
Estou usando-o desde alguns dias e até agora está funcionando perfeitamente. Espero que ajude você.
Como esse é o primeiro hit do Google para mim (e provavelmente para outros) sobre como trabalhar com sessões no Vim, decidi adicionar um pouco à resposta do @ mathielo sobre como tornar isso automático.
Eu gosto do código dele, mas a adição da solução "only if without args" parecia um pouco ausente. Esta é a minha versão modificada:
function! MakeSession(overwrite)
let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
if (filewritable(b:sessiondir) != 2)
exe 'silent !mkdir -p ' b:sessiondir
redraw!
endif
let b:filename = b:sessiondir . '/session.vim'
if a:overwrite == 0 && !empty(glob(b:filename))
return
endif
exe "mksession! " . b:filename
endfunction
function! LoadSession()
let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
let b:sessionfile = b:sessiondir . "/session.vim"
if (filereadable(b:sessionfile))
exe 'source ' b:sessionfile
else
echo "No session loaded."
endif
endfunction
" Adding automatons for when entering or leaving Vim
if(argc() == 0)
au VimEnter * nested :call LoadSession()
au VimLeave * :call MakeSession(1)
else
au VimLeave * :call MakeSession(0)
endif
A mudança notável aqui é a substituição opcional. Se você abrir o Vim sem opções, ele abrirá qualquer sessão existente e substituirá as alterações feitas quando você sair. Se o Vim for aberto com opções, ele criará apenas uma nova sessão se não existir nenhuma, isso significa que você pode abrir arquivos únicos em um diretório que possui uma sessão sem substituí-lo. Em seguida, você pode abrir o Vim sem opções para executar a sessão. Se não houver uma sessão, ela criará uma nova.
Eu apenas tentei sua solução postada acima no Neovim 0.2.2 e coloquei seu snippet, $HOME/.vim/plugin/sessions.vimmas ele não está salvando os arquivos da sessão. ¯ \ _ (ツ) _ / ¯
iPatch®
Esse tópico, e particularmente o comentário vinculado, pode ajudar: superuser.com/questions/404686/… Eu o tenho no meu .vimrc e isso funciona bem.
PMunch
tenho que trabalhar, aparentemente, eu tenho que sair (n) vim para que a sessão seja escrito inserção piada de mau gosto Obrigado novamente por compartilhar 👍
iPatch
3
Existe este maravilhoso plugin chamado vim-session . É muito poderoso. Para instalá-lo:
cd ~/.vim/bundle
git clone https://github.com/xolox/vim-session.git
Mapeei sua funcionalidade no meu .vimrcarquivo assim:
Agora, no modo normal, basta digitar <leader>sse você verá um comando como este
:SaveSession
Agora adicione o nome da sua sessão
:SaveSession namesession
e isso é tudo.
Quando você fecha o Vim e reabre, basta
:OpenSession
e você verá sua sessão aberta.
Há muitas outras configurações para adicionar ao seu .vimrcarquivo. Consulte a documentação para obter exemplos:
let g:session_directory = "~/.vim/tmp/session" // the directory must be created before the sessions will be saved there
let g:session_autoload = "no" // automatic reload sessions
let g:session_autosave = "no" // autosave
let g:session_command_aliases = 1
Eu tive problemas específicos com o plug-in e as sessões da companhia aérea. Mudar para o Obsession resolveu os problemas, foi uma descoberta incrível após semanas de luta. Veja github.com/vim-airline/vim-airline/issues/…
icc97
1
Thanks @mathielo Seguindo o exemplo de @mathielo, adicionei a linha abaixo ao .vimrc para salvar a sessão ativa (se houver):
au VimLeave * if this_session != "" | exe "mksession! ".this_session
Se você quiser colocar mais linhas, precisará usar endif:
au VimLeave * if v:this_session != ""
au VimLeave * exe "mksession! ".this_session
au VimLeave * endif
Você só precisa salvar uma nova sessão no vim com
:mks [Session filename]
e depois de começar com
$ vim -S [Session filename]
O vim iniciará a sessão e você não precisa se preocupar em salvá-la toda vez que fechar o vim.
Se você não tiver uma sessão ativa, o .vimrc não fará nada. Como antes.
Era isso que eu estava procurando! Mais uma vez obrigado @mathielo!
Para gerenciar várias sessões (por diretório / repositório), recentemente mudei do plug-in vim-session para o vim-workspace . Seu gerenciamento de sessões é relativamente simples e funciona muito bem.
man
Respostas:
Você quer algo como
Depois, você poderá obter esse arquivo vim e voltará a sua sessão antiga:
ou abra o vim com a opção -S:
fonte
Session.vim
. Portanto, se você deseja salvar apenas uma sessão no diretório atual, pode usar:mksession
ou:mks
do vim para salvar sua sessão atual e apenasvim -S
abri-la novamente.Você pode querer definir essas opções de sessão no seu vimrc. Especialmente opções é irritante quando você altera seu vimrc depois de salvar a sessão.
fonte
Observe que: mksession não salvará as alterações nos arquivos que você fez. Cometi o erro de fechar o vim depois de salvar a sessão, assumindo que vou retomar a partir daí. Mas da próxima vez que abri a sessão, as alterações feitas nos arquivos haviam desaparecido.
fonte
:mksession
.:wqa
:xa
Um toque de tecla a menos. Yay!.vimrc
:vimrc au FocusLost * silent! wa
Isso será salvo automaticamente sempre que o buffer perder o foco.Se você usar o NERDTree como seu explorador de arquivos / traço, eu recomendaria o plug-in xolox / vim-session em vez do comando built-in: mksession. Por alguma razão,: mksession falha ao restaurar os buffers NERDTree. Sua milhagem pode variar, mas pensei em compartilhar minha experiência.
fonte
let g:nerdtree_tabs_open_on_gui_startup=0
elet g:nerdtree_tabs_open_on_new_tab=0
fazer com que o xolox / vim-session funcione.Se você deseja automatizar o processo sem usar nenhum plug-in, use Go away e volte do Vim Tips Wiki .
Cada vez que você sai do Vim, ele salva a sessão atual
~/.vim/sessions
e a carrega novamente quando o Vim é aberto. Também é baseado no seu caminho atual; portanto, se você abrir o Vim a partir de diretórios diferentes, terá sessões diferentes, o que é bastante útil ao trabalhar em projetos diferentes.Apenas edite seu
~/.vimrc
arquivo e adicione o seguinte:Mesmo para iniciantes, esse script é um pouco fácil de entender e personalizar.
Observe que este script só funcionará corretamente para sistemas Unix (MacOS / Linux), ele precisa ser adaptado para funcionar no Windows.
ATUALIZAÇÃO: Adicionando a sugestão de 0xc0de , você pode substituir a
VimEnter
linha por essas se desejar que o Vim carregue a sessão apenas se nenhum argumento for fornecido :fonte
if argc() == 0 au VimEnter * nested :call LoadSession() end
pwd
) como posso defini-lo como o último diretório de trabalho antes de sair do vim? para que ele possa carregar a última sessão de trabalho em vez da sessão em~/
?Existe um plugin muito útil para esta tarefa, o vim-startify, que lida com muitas outras coisas, como arquivos abertos recentemente, etc; também possui uma interface muito fácil.
Estou usando-o desde alguns dias e até agora está funcionando perfeitamente. Espero que ajude você.
fonte
Como esse é o primeiro hit do Google para mim (e provavelmente para outros) sobre como trabalhar com sessões no Vim, decidi adicionar um pouco à resposta do @ mathielo sobre como tornar isso automático.
Eu gosto do código dele, mas a adição da solução "only if without args" parecia um pouco ausente. Esta é a minha versão modificada:
A mudança notável aqui é a substituição opcional. Se você abrir o Vim sem opções, ele abrirá qualquer sessão existente e substituirá as alterações feitas quando você sair. Se o Vim for aberto com opções, ele criará apenas uma nova sessão se não existir nenhuma, isso significa que você pode abrir arquivos únicos em um diretório que possui uma sessão sem substituí-lo. Em seguida, você pode abrir o Vim sem opções para executar a sessão. Se não houver uma sessão, ela criará uma nova.
fonte
$HOME/.vim/plugin/sessions.vim
mas ele não está salvando os arquivos da sessão. ¯ \ _ (ツ) _ / ¯Existe este maravilhoso plugin chamado vim-session . É muito poderoso. Para instalá-lo:
Mapeei sua funcionalidade no meu
.vimrc
arquivo assim:Agora, no modo normal, basta digitar
<leader>ss
e você verá um comando como esteAgora adicione o nome da sua sessão
e isso é tudo.
Quando você fecha o Vim e reabre, basta
e você verá sua sessão aberta.
Há muitas outras configurações para adicionar ao seu
.vimrc
arquivo. Consulte a documentação para obter exemplos:Há um bom tutorial no YouTube.
fonte
Pessoalmente, apenas envolvo o plug-in Obsession de Tim Pope para permitir a definição de um
sessiondir
e evitar digitar o caminho:fonte
Thanks @mathielo Seguindo o exemplo de @mathielo, adicionei a linha abaixo ao .vimrc para salvar a sessão ativa (se houver):
Se você quiser colocar mais linhas, precisará usar endif:
Você só precisa salvar uma nova sessão no vim com
e depois de começar com
O vim iniciará a sessão e você não precisa se preocupar em salvá-la toda vez que fechar o vim.
Se você não tiver uma sessão ativa, o .vimrc não fará nada. Como antes.
Era isso que eu estava procurando! Mais uma vez obrigado @mathielo!
fonte
:q
vez de:bd
... Obrigado!Se você planeja ter apenas 1 sessão para o projeto, basta
que criará um
Session.vim
arquivo no diretório atual e abrirá a sessão (do mesmo diretório):Se você alterar a sessão e quiser salvá-la:
Se você planeja ter várias sessões , prefiro salvá-las em arquivos ocultos no diretório do projeto:
Para abri-lo (do mesmo diretório):
Salvar sessão:
Como as sessões são salvas em arquivos ocultos, para visualizá-las, não se esqueça
-a
fonte
Você pode armazenar a sessão onde quiser.
Ex:
Isso armazena a sessão na unidade D.
Isso pode ser aberto digitando-se
em qualquer um dos arquivos vim.
fonte
Abaixo está o único conf. isso realmente funcionou para mim. Peguei a partir daqui , onde você também pode ter uma versão mais completa / complexa.
fonte
Para gerenciar várias sessões (por diretório / repositório), recentemente mudei do plug-in vim-session para o vim-workspace . Seu gerenciamento de sessões é relativamente simples e funciona muito bem.
fonte