vimは最後の位置を記憶していません


89

Ubuntu LTS 12.04にはvimエディターがあります。ファイルを開き、段落に移動してvimを再度開くと、カーソルは常にファイルの先頭に移動します。

これは予期される動作ではありません。ファイルを閉じた後、vimは最後に読み取った位置をどのように記憶できますか?

viも試しましたが、結果は同じです。


1
申し訳ありませんが、そうすべきだというドキュメントはありません。Vimの場合は100%確信していますか?そして、申し訳ありませんが、最後の位置を記憶するように設定する方法がわかりませんでした。私は不必要なコメントをするかもしれませんが、それを以前に行ったプログラムを経験したかどうかを知る必要があります。
デニー

4
たとえば、Redhatでは、ファイル内の最後に参照された行がvimによって記憶されます。vimはubuntu 12.04では不便なようです
Lunar Mushrooms

また、Ubuntu 10.04では、これはデフォルトの動作ではありません。私は長い間UbuntuでVimを使用してきましたが、あなたの期待される動作を見たことはありません。おそらくそのインストールでそうするように設定しているでしょう-例えば、@ GaryBishopの答えを見てください。
gertvdijk

申し訳ありませんが、Ubuntu 10.04ではなく、機能するのは赤い帽子でした。私のコメントを更新しました
月のキノコ

回答:


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 16

2
あるユーザーが最後の位置を覚えているが、他のユーザーは覚えていないという奇妙な問題があった。これらの行はユーザーの.vimrcファイルにありましたが、/ etc / vim / vimrcでコメントアウトされていたことがわかります。そこでコメント解除すると、すべてのユーザーが有効になりました。
felwithe

66

私はこれと同じ問題を抱えていたので、ホームディレクトリの.viminfoファイルの所有権が間違っていたことがわかりました。root:rootが所有していました。

ファイルの所有権を自分自身に変更して修正すると、ファイルの位置を思い出すことが再び機能し始めました


3
私の場合、このことはうまくいきました。私は同じ問題を抱えていました。vimの問題を修正する.viminfo(ホームディレクトリに存在)の所有権を変更しました。しかし、なぜroot:rootで作成されたのでしょうか?
ブリジェッシュヴァレラ

1
@BrijeshValeraは、ファイルがまだ存在していないときにrootとしてvimを起動したためと思われます。
ルスラン

1
@Ruslanしかし、ファイルはルートユーザーのホームディレクトリに作成されるべきではありませんか?
ankush981

5
@dotslashはで扱いにくいsudoです。環境を変更しません(少なくともほとんど):実行してみてsudo bash -c 'echo $HOME'ください。ルートの代わりにホームディレクトリを取得します。
ルスラン

1
それが私の18.04の原因でした
ハニノフスキー


2

vim-lastplace(私は著者です)というプラグインがあり、中断した場所からファイルを開きます。通常は新しいメッセージを編集しており、コミットメッセージファイルの先頭から開始するため、コミットメッセージを無視することで上記の提案を改善します。


どうして下票?vim-lastplaceは、OPが要求したことを正確に実行し、受け入れられた回答(多くのバグが含まれています)よりも優れています。
グレッグディーチェ

0

私の場合、viはシンボリックリンクでした/usr/bin/vi -> /etc/alternatives/vi -> /usr/bin/vim.tiny。後者には本当のvim機能はありません。パッケージ 'vim'をインストールすると(synapticまたはapt-getを使用)、このシンボリックリンクがを指すよう/usr/bin/vim.basicになり、問題が修正されました。


-1

Lunar Mushroomsソリューションに誤りがあります。ここで修正:

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ます。どうやらこれで問題は解決したようです。エラーはどこにありますか?
ネフェンテ

最初のソリューションをコピー/貼り付けた場合、エラーが発生したためです。そして、/ usr / share / vim / vim74 / vimrc_example.vim(先頭にバックスラッシュが含まれていました)のコンテンツを投稿しました。
アルノー

1
@Amaudは、ファイルですでに提供されているがコメントされている行領域です。"コメントを外すには、行頭の文字を削除するだけです。「最初のソリューションをコピー/貼り付け」する必要はありません。
ADTC 16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.