2010-03-06 34 views
9

Các mã sau đây là bên trong .vimrc tôi và thường phục hồi vị trí con trỏ cuối cùng của một tập tin tôi mở với vim:vim khôi phục vị trí con trỏ; loại trừ các file đặc biệt

autocmd BufReadPost * 
    \ if line("'\"") > 1 && line("'\"") <= line("$") | 
    \ exe "normal! g`\"" | 
    \ endif 

Tôi thực sự thích tính năng này và muốn rời xa nó bật, trừ một tệp: Khi cam kết với git, vim bị kích hoạt và tôi có thể chỉnh sửa thông báo cam kết với nó. Tuy nhiên tệp tin cam kết tồn tại trước khi bắt đầu vim (và được điền sẵn), vì vậy vim thấy nó như một tệp hiện có và khôi phục vị trí con trỏ cuối cùng (thường không phải là nơi tôi muốn bắt đầu nhập).

Vì vậy, có khả năng sửa đổi tập lệnh ở trên để loại trừ tệp COMMIT_EDITMSG không?

+2

: - Tôi đã mất ít thời gian hơn để nhập 'ggI' sau khi git cam kết. –

+1

'ggI'? Cái gì thế? – poke

+1

đó là lệnh vim để chuyển đến đầu tệp và chuyển sang chế độ chèn :-) –

Trả lời

8

Sau khi đọc qua hướng dẫn sử dụng trên các lệnh tự động, tôi nhận thấy rằng có vẻ như không thể xác định mẫu mà chúng khớp với cách chúng loại trừ một mẫu đặc biệt. Và tôi cũng không thể sử dụng một số biến chứa tên tệp hiện tại, do đó tôi chỉ cần mở rộng tệp hiện tại nếu loại trừ tệp.

Tuy nhiên, dựa trên những nhận xét của Pavel Shved (về gg chuyển sang phía trên cùng của tập tin) Tôi nghĩ rằng trong cùng một cách chúng ta có thể chỉ đơn giản là ghi đè ảnh hưởng của vị trí khôi phục, bằng cách đơn giản di chuyển nó lên đầu trang sau này một lần nữa. Vì vậy, tôi đã đưa ra với điều này:

autocmd BufReadPost COMMIT_EDITMSG 
    \ exe "normal! gg" 

Đặt này sau khi trước đó autocmd BufReadPost chỉ đơn giản là chuỗi thực hiện sự kiện, vì vậy vim, sau khi thực hiện đầu tiên và khôi phục lại vị trí, đọc này và phù hợp với nó trên filename loại trừ và sử dụng gg để di chuyển con trỏ lên trên cùng, về cơ bản sẽ ghi đè tác động của autocmd gốc.

Và đó chỉ hoạt động tốt :)

1

Có lẽ bạn nên điều tra mksession. Bạn có thể thiết lập các lệnh tự động VimEnter/VimLeave để "làm điều đúng" khi bạn đã chỉ định các tệp trên dòng lệnh (như khi git gọi vim). Có rất nhiều kịch bản cho việc này trôi nổi xung quanh, xem ví dụ http://vim.wikia.com/wiki/Working_with_multiple_sessions.

3

tôi hiểu bạn đã tìm ra một giải pháp, nhưng tôi đã có cùng một câu hỏi và đã đưa ra một sự lựa chọn mà không yêu cầu chaining.

function! PositionCursorFromViminfo() 
    if !(bufname("%") =~ '\(COMMIT_EDITMSG\)') && line("'\"") > 1 && line("'\"") <= line("$") 
    exe "normal! g`\"" 
    endif 
endfunction 
:au BufReadPost * call PositionCursorFromViminfo() 
+0

Tinh tế đẹp - có vẻ sạch hơn nhảy đôi! –

0

Hãy thử điều này, con trỏ di chuyển nó đến vị trí cuối cùng

bộ ẩn

1

Đặt những dòng sau thay vì dòng của bạn trong .vimrc:

au BufWinLeave * mkview 
au BufWinEnter * silent loadview 
Các vấn đề liên quan