vim不记得最后的位置


89

我的Ubuntu LTS 12.04具有vim编辑器。如果我打开文件,移至一个段落并重新打开vim,则光标将始终移至文件开头。

这不是预期的行为。vim如何在关闭文件后能记住上一次读取的位置?

vi也尝试过,但是结果是一样的。


1
对不起,但是似乎有0个文档认为应该这样做。您是否100%确信Vim是这种情况?而且,对不起,我不知道如何配置它以记住上一个位置。我可能会发表不必要的评论,但是我必须知道您是否早些经历过该程序。
丹尼2012年

4
例如在Redhat中,vim会记住文件中最后引用的行。vim在ubuntu 12.04中似乎很不方便
Lunar Mushrooms

同样在Ubuntu 10.04中,这当然不是默认行为。我在Ubuntu上使用Vim已有很长时间了,从未见过预期的行为。您可能已经对其进行了配置,以便在该安装上执行此操作-例如,请参见@GaryBishop的答案。
gertvdijk 2012年

抱歉,不是Ubuntu 10.04,而是红色的帽子。更新了我的评论
月球蘑菇

Answers:


116

解决了:

/ etc / vim / vimrc

已经包含必要的功能。只需取消注释即可:

" Uncomment the following to have Vim jump to the last position when
" reopening a file
if has("autocmd")
  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif

(实际上,您也可以参考/usr/share/vim/vim73/vimrc_example.vim)


它似乎仅适用于root用户,不适用于其他用户。我的vimrc文件是-rw-r--r-- 1 root root; 那会是问题吗?
ADTC

2
我遇到一个奇怪的问题,一个用户会记住最后一个位置,而其他人则不会。原来这些行在用户的.vimrc文件中,但在/ etc / vim / vimrc中已被注释掉。在那里取消注释它们对所有用户启用。
felwithe

66

我遇到了同样的问题,原来我的主目录中的.viminfo文件拥有错误的所有权。它由root:root拥有。

当我通过将文件所有权更改为自己来固定文件所有权后,记住文件位置又开始对我有用


3
这件事对我来说很有效。我有同样的问题。我更改了.viminfo的所有权(存在于主目录中),该所有权解决了vim问题。但是为什么用root:root创建它呢?
Brijesh Valera

1
@BrijeshValera可能是因为当文件尚不存在时,您以root用户身份启动了vim。
Ruslan

1
@Ruslan但是不应该在root用户的主目录中创建文件吗?
ankush981

5
@dotslash有点棘手sudo。它不会改变环境(至少在大多数情况下不会改变):尝试运行sudo bash -c 'echo $HOME',您将获得主目录,而不是根目录。
Ruslan

1
这就是我的18.04
Hanynowsky '18


2

有一个名为vim-lastplace的插件(我是作者),它将在您中断的地方打开文件。它通过忽略提交消息来改进上述建议,因为您通常在编辑新消息,并且希望从提交消息文件的顶部开始。


为什么要下票?vim-lastplace完全符合OP的要求,甚至比接受的答案(其中有很多错误)做得更好。
Greg Dietsche

0

就我而言,vi是一个符号链接:/usr/bin/vi -> /etc/alternatives/vi -> /usr/bin/vim.tiny。后者没有真正的vim功能。安装软件包“ vim”(使用synaptic或apt-get)使此符号链接指向/usr/bin/vim.basic,从而解决了该问题。


-1

月球蘑菇解决方案中有一个错误。这里是更正:

if has("autocmd")
  " 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).
  " Also don't do it when the mark is in the first line, that is the default
  " position when opening a file.
  autocmd BufReadPost *
    \ if line("'\"") > 1 && line("'\"") <= line("$") |
    \   exe "normal! g`\"" |
    \ endif

endif

为什么您认为您的解决方案是正确的?它看起来很相像,但对于反斜杠开头一行。如果有的话,它们是否不应该位于指示命令在下一行继续的行的末尾...?另外,接受的答案只是谈论取消注释与一起安装的全局配置文件中的部分vim。显然,这解决了问题。错误在哪里?
Nephente

因为如果我复制/粘贴第一个解决方案,则会出现错误。然后,我发布了/usr/share/vim/vim74/vimrc_example.vim的内容(在开头包含反斜杠)。
2015年

1
@Amaud文件中已提供的行区域,但已注释。您只需要删除行首的"字符即可取消注释。无需“复制/粘贴第一个解决方案”。
ADTC
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.