vim은 마지막 위치를 기억하지 못한다


89

내 우분투 LTS 12.04에는 vim 편집기가 있습니다. 파일을 열고 단락으로 이동하여 vim을 다시 열면 커서가 항상 파일의 시작 부분으로 이동합니다.

이것은 예상 된 동작이 아닙니다. vim은 파일을 닫은 후 마지막 읽기 위치를 어떻게 기억합니까?

나는 vi또한 시도 했지만 결과는 동일합니다.


1
죄송합니다. 설명서가 0 개있는 것 같습니다. Vim의 경우가 100 % 확실합니까? 그리고 죄송합니다. 마지막 위치를 기억하도록 구성하는 방법을 모르겠습니다. 나에 의해 불필요한 의견이있을 수 있지만 프로그램을 일찍 경험했는지 알고 싶습니다.
데니

4
예를 들어 Redhat에서 파일의 마지막 참조 행은 vim에 의해 기억됩니다. vim은 우분투 12.04에서 불편한 것 같습니다
음력 버섯

또한 우분투 10.04에서는 이것이 기본 동작이 아닙니다. 나는 우분투에서 오랫동안 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을 참조 할 수도 있습니다)


다른 사용자가 아닌 루트 사용자와 만 작동하는 것 같습니다. 내 vimrc 파일은 -rw-r--r-- 1 root root; 그게 문제가 될까요?
ADTC

2
한 사용자가 마지막 위치를 기억하지만 다른 사람들은 기억하지 못하는 이상한 문제가있었습니다. 이 줄은 사용자의 .vimrc 파일에 있지만 / etc / vim / vimrc에 주석 처리되어 있습니다. 주석 처리를 제거하면 모든 사용자가 사용할 수 있습니다.
felwithe

66

나는이 같은 문제가 있었고 내 홈 디렉토리의 .viminfo 파일의 소유권이 잘못되었다는 것이 밝혀졌습니다. root : root가 소유했습니다.

파일 소유권을 자신으로 변경하여 파일 소유권을 수정 한 후 파일 위치를 기억하면 다시 작동하기 시작했습니다.


3
이 일은 제 경우에 효과가있었습니다. 나는 같은 문제가 있었다. vim 문제를 해결하는 .viminfo (홈 디렉토리에 있음)의 소유권을 변경했습니다. 그러나 왜 root : root로 작성 되었습니까?
Brijesh Valera

1
@BrijeshValera는 파일이 아직 없을 때 루트로 vim을 시작했기 때문에 가능합니다.
Ruslan

1
@Ruslan 그러나 파일이 루트 사용자의 홈 디렉토리에 생성되어서는 안됩니까?
ankush981

5
까다로운 @dotslash sudo. 환경을 변경하지는 않습니다 (적어도 대부분) : running을 시도 sudo bash -c 'echo $HOME'하면 루트 디렉토리 대신 홈 디렉토리를 얻을 수 있습니다.
Ruslan

1
그것은 내 18.04의 원인이었습니다
Hanynowsky


2

vim-lastplace (저는 저자입니다) 라는 플러그인이 있습니다 . 일반적으로 새 메시지를 편집하고 커밋 메시지 파일의 맨 위에서 시작하기 때문에 커밋 메시지를 무시하여 위의 제안을 개선합니다.


왜 downvote? vim-lastplace는 OP가 요청한 내용을 정확하게 수행하며 허용되는 답변 (여러 가지 버그가 있음)보다 훨씬 우수합니다.
Greg Dietsche

0

필자의 경우 vi는 심볼릭 링크였습니다 /usr/bin/vi -> /etc/alternatives/vi -> /usr/bin/vim.tiny. 후자는 실제 vim 기능이 없습니다. 패키지 'vim'(시냅틱 또는 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합니다. 분명히 이것은 문제를 해결했습니다. 오류는 어디에 있습니까?
Nephente

첫 번째 솔루션을 복사하여 붙여 넣으면 오류가 발생하기 때문입니다. 그리고 /usr/share/vim/vim74/vimrc_example.vim (처음에는 백 슬래시 포함)의 내용을 게시했습니다.
Arnaud

1
@Amaud 파일에 이미 제공되었지만 주석이 달린 행 영역입니다. "주석을 해제하려면 줄의 시작 부분에서 문자 를 삭제하면 됩니다. "첫 번째 솔루션을 복사 / 붙여 넣기"할 필요가 없습니다.
ADTC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.