Có thể áp dụng các cấu hình vim mà không cần khởi động lại không?


80

Tôi muốn chỉnh sửa .vimrctệp từ Vim và áp dụng chúng mà không cần khởi động lại Vim.

Câu trả lời:


80

Có, chỉ cần sử dụng :so %lệnh trong khi chỉnh sửa .vimrc của bạn.

Nếu bạn muốn vim tự động tải lại cấu hình của mình, bạn phải thêm các lệnh sau:

augroup myvimrchooks
    au!
    autocmd bufwritepost .vimrc source $MYVIMRC
augroup END

nhóm các lệnh tự động ở đây để tránh tải lại "theo cấp số nhân" nếu bạn lưu nhiều lần cấu hình của mình.


Lưu ý rằng điều này không hoạt động với gvimrchoặc nếu tệp của bạn được gọi là _vimrchoặc vimrc, hoặc nếu bạn chỉnh sửa tệp được gọi .vimrctrong một thư mục khác. Xem câu trả lời của tôi để giải quyết những vấn đề này.
Tom Hale

Đối với tôi nó không thành công với các lỗi như Function Inc already exist, add ! to replace it.
Hi-Angel

Chức năng nào mà nhóm tăng cường phục vụ trong ngữ cảnh này? Điều này có thể không được viết lại một cách đơn giản autocmd! bufwritepost .vimrc source ~/.vimrc? Ngay cả khi cần nhóm vì lý do nào đó, không thể bỏ qua dòng 2 nếu dòng 3 được viết lại để bắt đầu autocmd!?
John Karahalis

46

Đây là phiên bản tương thích đa nền tảng hơn nếu bạn chạy trên Mac / Windows / Linux và gvimrc:

augroup myvimrc
    au!
    au BufWritePost .vimrc,_vimrc,vimrc,.gvimrc,_gvimrc,gvimrc so $MYVIMRC | if has('gui_running') | so $MYGVIMRC | endif
augroup END

Autocmd xem tất cả các *vimrctệp tiềm năng và khi một tệp thay đổi, nó sẽ tải lại vimrctệp sau đó gvimrcnếu GUI đang chạy.


5
Nó được đặt khi GUI Vim được khởi động. thấy:help gvimrc
matpie

3
FANTASTIC, cảm ơn. Nếu bạn làm điều này, hãy tránh cái rắm não mà tôi vừa phạm phải ... Tôi đã mở gvim, thêm cái này vào vimrc của mình, và sau đó cố gắng xác nhận nó hoạt động. Không ... 20 phút sau, tôi nhận ra mình QUÊN NGUỒN NGUỒN TẬP TIN MỘT LẦN SAU KHI ĐÃ THÊM AUTOCMD. Một khi tôi đã làm điều đó, tất nhiên, mọi thứ đều hoạt động. Tôi đoán nó hơi quá hợp với tôi, và tôi đã bị "tràn chồng".
Charlie Flowers

3
Tôi đã sử dụng điều này, nhưng cũng kiểm tra xem có $GVIMRCtồn tại không, bởi vì đôi khi nó không. if has('gui_running') && filereadable($MYGVIMRC)
k107

Điều duy nhất lạ lùng đối với tôi lúc đầu là nó chỉ tải lại tệp vimrc giữ những thứ đã được thiết lập. Ví dụ: nếu ban đầu bạn có "set number" trong vimrc của mình, sau đó bạn nhận xét dòng đó và lưu tài liệu, bạn vẫn có các số ở bên trái. Nhưng nó thực sự có ý nghĩa ... nếu bạn muốn vô hiệu hóa thứ gì đó, bạn nên làm điều đó theo cách thủ công.
piponazo

1
Bất kỳ lý do để không sử dụng au BufWritePost $MYVIMRChoặc au BufWritePost $MYVIMRC,$MYGVIMRC?
phs


8
" Quickly edit/reload this configuration file
nnoremap gev :e $MYVIMRC<CR>
nnoremap gsv :so $MYVIMRC<CR>

Để tự động tải lại khi lưu, hãy thêm thông tin sau vào $MYVIMRC:

if has ('autocmd') " Remain compatible with earlier versions
 augroup vimrc     " Source vim configuration upon save
    autocmd! BufWritePost $MYVIMRC source % | echom "Reloaded " . $MYVIMRC | redraw
    autocmd! BufWritePost $MYGVIMRC if has('gui_running') | so % | echom "Reloaded " . $MYGVIMRC | endif | redraw
  augroup END
endif " has autocmd

và sau đó lần cuối cùng, hãy nhập:

:so %

Lần tiếp theo bạn lưu vimrc, nó sẽ tự động được tải lại.

Đặc trưng:

  • Cho người dùng biết điều gì đã xảy ra (đồng thời đăng nhập :messages)
  • Xử lý các tên khác nhau cho các tệp cấu hình
  • Đảm bảo rằng nó sẽ chỉ khớp với tệp cấu hình thực (bỏ qua các bản sao trong các thư mục khác hoặc một fugitive://khác biệt)
  • Sẽ không tạo ra lỗi nếu sử dụng vim-tiny

Tất nhiên, việc tải lại tự động sẽ chỉ xảy ra nếu bạn chỉnh sửa vimrctrong vim của mình.


Điều này dường như chỉ hoạt động khi tất cả các tệp đều được mở trong cùng một phiên bản vimmà tôi đang chỉnh sửa $MYVIMRC. Ví dụ: nếu chúng ở một thiết bị đầu cuối khác, thì tôi vẫn phải nhập nguồn theo cách thủ công $MYVIMRC. Có cách nào để giải quyết vấn đề này không?
Zoey Hewll

1
Không phải tôi biết - điều này hoạt động bằng cách bắt khi dòng điện vimghi ra tệp. Có thể có thể theo dõi mtime trên chính tệp đó, nhưng không chắc về cách thực hiện điều đó mà không cần thăm dò không đồng bộ.
Tom Hale

1

autocmd! bufwritepost _vimrc source%

điều này sẽ tự động tải lại tất cả cấu hình trong tệp _vimrc khi bạn lưu

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.