Wikia

Vim Tips Wiki

Changes: Open the last edited file

Edit

Back to page

(adjust previous/next navigation + minor manual clean)
(Change <tt> to <code>, perhaps also minor tweak.)
 
Line 12: Line 12:
 
|category2=
 
|category2=
 
}}
 
}}
The <tt>starting.txt</tt> help file ({{help|starting.txt}}) tells you how to open the last edited file in csh. In bash, do it like so:
+
The <code>starting.txt</code> help file ({{help|starting.txt}}) tells you how to open the last edited file in csh. In bash, do it like so:
   
 
<pre>
 
<pre>
Line 42: Line 42:
 
----
 
----
 
{{Todo}}
 
{{Todo}}
In the above, <tt>bufname("2" + 0)</tt> is a confused way of saying <tt>bufname(2)</tt>. But what has buffer 2 got to do with it?
+
In the above, <code>bufname("2" + 0)</code> is a confused way of saying <code>bufname(2)</code>. But what has buffer 2 got to do with it?
   
 
----
 
----
Line 74: Line 74:
 
</pre>
 
</pre>
   
:Am I missing something? Why can't you just use <tt>:mksession</tt>? {{help|:mksession}} --[[User:Fritzophrenic|Fritzophrenic]] 02:00, 6 April 2009 (UTC)
+
:Am I missing something? Why can't you just use <code>:mksession</code>? {{help|:mksession}} --[[User:Fritzophrenic|Fritzophrenic]] 02:00, 6 April 2009 (UTC)
   
 
----
 
----

Latest revision as of 05:39, July 13, 2012

Tip 613 Printable Monobook Previous Next

created 2003 · complexity basic · author Adam Monsen · version 6.0


The starting.txt help file (:help starting.txt) tells you how to open the last edited file in csh. In bash, do it like so:

alias lvim='vim -c "normal '\''0"'

CommentsEdit

With this in vimrc, invoking Vim without arguments will open the last file (it will get the last file and position from .viminfo).

" Go to last file if invoked without arguments.
autocmd VimEnter * nested if
  \ argc() == 0 &&
  \ bufname("%") == "" &&
  \ bufname("2" + 0) != "" |
  \   exe "normal! `0" |
  \ endif

" From vimrc_example.vim distributed with Vim 7.
" When editing a file, always jump to the last known cursor position.
" Don't do it when the position is invalid or when inside an event handler
" (happens when dropping a file on gvim).
autocmd BufReadPost *
  \ if line("'\"") > 1 && line("'\"") <= line("$") |
  \   exe "normal! g`\"" |
  \ endif

 TO DO 
In the above, bufname("2" + 0) is a confused way of saying bufname(2). But what has buffer 2 got to do with it?


These make sure all your tabs are restored (VIM 7.x and higher).

" Open last active file(s) if VIM is invoked without arguments.
autocmd VimLeave * nested let buffernr = bufnr("$") |
    \ let buflist = [] |
    \ while buffernr > 0 |
    \	if buflisted(buffernr) |
    \	    let buflist += [ bufname(buffernr) ] |
    \	endif |
    \   let buffernr -= 1 |
    \ endwhile |
    \ if (!isdirectory($HOME . "/.vim")) |
    \	call mkdir($HOME . "/.vim") |
    \ endif |
    \ call writefile(reverse(buflist), $HOME . "/.vim/buflist.txt")

autocmd VimEnter * nested if argc() == 0 && filereadable($HOME . "/.vim/buflist.txt") |
    \	for line in readfile($HOME . "/.vim/buflist.txt") |
    \	    if filereadable(line) |
    \		execute "tabedit " . line |
    \		set bufhidden=delete |
    \	    endif |
    \	endfor |
    \	tabclose 1 |
    \ endif
Am I missing something? Why can't you just use :mksession? :help :mksession --Fritzophrenic 02:00, 6 April 2009 (UTC)

You are right. This works better.

" Go to last file(s) if invoked without arguments.
autocmd VimLeave * nested if (!isdirectory($HOME . "/.vim")) |
    \ call mkdir($HOME . "/.vim") |
    \ endif |
    \ execute "mksession! " . $HOME . "/.vim/Session.vim"

autocmd VimEnter * nested if argc() == 0 && filereadable($HOME . "/.vim/Session.vim") |
    \ execute "source " . $HOME . "/.vim/Session.vim"

Around Wikia's network

Random Wiki