Vim의 지속적인 실행 취소를 사용하십니까?


96

Vim 7.3의 새로운 기능 중 하나는 '지속적 실행 취소'로, 버퍼를 종료 할 때 실행 취소 트리를 파일에 저장할 수 있습니다.

안타깝게도 제대로 활성화하지 못했거나 잘못 사용하고있는 것 같습니다. 지금까지 시도한 내용은 다음과 같습니다.

~ / .vimrc에 다음을 추가했습니다.

set undofile                " Save undos after file closes
set undodir=$HOME/.vim/undo " where to save undo histories
set undolevels=1000         " How many undos
set undoreload=10000        " number of lines to save for undo

그 후에는 모든 파일을 열고 편집 한 다음 저장-닫을 수 있어야하며 다시 열면 마치 내가 떠나지 않은 것처럼 실행 취소 / 다시 실행할 수 있어야합니다. 불행히도 언두 파일이 작성되지 않았기 때문에 이것은 사실이 아닌 것 같습니다.

노트:

  1. 크림이없는 Vim 프로젝트에서 Vim 7.3을 사용하여 Win 7을 사용하고 있습니다. 지속적인 실행 취소가 적용됩니다.

  2. $ HOME / .vim / undo가 내 파일 시스템에 있습니다.


38
강조하기 위해, 포인트 2)는 매우 중요합니다. 빔은 때까지 작동하지 않습니다 당신과 지속 취소에 대한 디렉토리를 작성하지 않습니다mkdir ~/.vim/undo
PUK

2
+1. 죄송합니다. Linux에서는 작동합니다 ... 알려 주셔서 감사합니다!
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

이 질문에 대한 향후의 방문객 : 마 하지 undodir의 값 주위에 따옴표를 넣어! 나는 잠시 동안이 문제에 갇혀있었습니다-따옴표없이 절대 paht를 사용하십시오.
naiveai

답변:


51

존재하지 않는 경우 .vimrc생성하고 undodir영구 실행 취소를 활성화 하려면 이것을 넣으십시오 . Windows와 Linux 모두에서 테스트되었습니다.

" Put plugins and dictionaries in this dir (also on Windows)
let vimDir = '$HOME/.vim'
let &runtimepath.=','.vimDir

" Keep undo history across sessions by storing it in a file
if has('persistent_undo')
    let myUndoDir = expand(vimDir . '/undodir')
    " Create dirs
    call system('mkdir ' . vimDir)
    call system('mkdir ' . myUndoDir)
    let &undodir = myUndoDir
    set undofile
endif

5
이 디렉토리를 생성하는 것이 바람직 할 수있다 ::silent call system('mkdir -p ' . &undodir)
카일 스트랜드

1
내가 사용하는 &I 때문에 보다는 팅 그것. (내 마음에 와 사이의이 구분 은 Vimscript의 엄청나게 끔찍한 "기능"중 하나이지만 YMMV입니다.)setundodirletletset
Kyle Strand

1
Kyle에게 감사 .vim합니다. 존재하지 않는 경우 만드는 것이 좋습니다 . 불행히도이 -p플래그는 Windows에 존재하지 않으므로 mkdirWindows 호환성을 보장하기 위해 호출에 대한 응답을 두 번 편집했습니다 .
Matthias Braun

2
아. -p플래그 를 사용하는 주된 이유 는 실제로 디렉토리가 존재할 때 오류를 피하는 것입니다. if has('win32')블록 안에 명령이 있으므로 Windows 에서는 mkdir없이 사용 -p합니다.
Kyle Strand

4
왜 사용하지 mkdir()않습니까? 그런 다음이 될 수 있습니다 call mkdir(myUndoDir, 'p'),처럼 동작한다 mkdir -p.
nelstrom

8

내 _gvimrc에서 이것을 시도했습니다.

" Persistent undo
try 
    set undodir=C:\vim\undodir
    set undofile
catch
endtry

try-catch 브래킷을 삭제하면 광고 된대로 작동하기 시작했습니다.

" Persistent undo
set undodir=C:\vim\undodir
set undofile

디렉토리를 만들어야했습니다.


if has('persistent_undo')
Arelav

silent !mkdir ~/.config/nvim/backups > /dev/null 2>&1
Arelav

set undodir=~/.config/nvim/backups
Arelav

1
endif"주석 메시지를 추가하면 메시지 길이를 증가
Arelav

3

$ HOME이 광고 된대로 작동하지 않는다고 생각합니다.

내 시스템에서 :echo $HOMEH를 보여줍니다 \하지만 : e $HOME/말한다 : ~/유효하지 않은 파일 이름을.

치료 여부를 확인하기 위해 절대 경로로 시도 할 수 있습니다.


나는 | : echo $ HOME | 및 | : e $ HOME / | 문제없이 변경해 보았습니다. 그것은 때때로 작동하는 것 같고 다른 사람들에게는 작동하지 않는 것 같았습니다. 특히 ~ / .vimrc 파일을 편집 할 때 백업을 저장하지 않습니다.
duckworthd 2011

Windows 7에서는 $TEMP. 내가 보면 set undodir?그것을 보여줍니다 ~/AppData/Local/Temp. 실행 취소 파일은 유지되며 올바르게로드됩니다. 아마도 $TEMP더 신뢰할 수 있을까요?
slawek 2013

1

이제 예상대로 작동합니다 file.txt. Windows 7에서 Vim 7.4 버퍼를 연 :setlocal undofile다음 버퍼에 변경 사항을 저장하면 "undodir ="을보고 .file.txt.un~하기 때문에 실행 취소 파일 이 함께 생성 :set undodir?됩니다. 기본적으로-즉 수동으로 지정할 필요가 없습니다. 모델 :set undofile라인 에서도 가능 합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.