Làm thế nào để tôi giới thiệu một chế độ ánh sáng, một chế độ ánh sáng, trong đó không phải tất cả các plugin đều được tải?


8

Vim config của tôi bao gồm các plugin mà cố gắng để xử lý dự án hiện tại, xây dựng thẻ, vv . Điều này khá hữu ích cho việc lập trình hàng ngày của tôi trong Vim, nhưng thật khó chịu khi tôi sử dụng Vim cho một số chỉnh sửa nhanh, như:

  • chỉnh sửa tin nhắn cam kết git;
  • chỉnh sửa lệnh shell khi tôi gõ Ctrl+xCtrl+ezsh hoặc bash;
  • Vân vân.

Tôi cũng không thích --noplugins, vì tôi vẫn muốn tận dụng một số plugin trong chế độ chỉnh sửa nhanh, chẳng hạn như vòm, dễ chuyển động và nhiều plugin khác.

Vì vậy, tôi muốn có một số "chế độ ánh sáng" (hoặc "chế độ nhanh"), trong đó một số plugin sẽ bị bỏ qua, nhưng không phải tất cả chúng.

Ý tưởng đầu tiên của tôi là có một số đối số dòng lệnh đặc biệt, mà tôi đã phân tích bằng vimscript, nhưng việc nhanh chóng cho thấy rằng hiện tại không thể có trong vimscript (nhân tiện, thật đáng buồn).

Ý tưởng thứ hai của tôi là đặt một số biến môi trường khi chạy vim, như thế này:

$ VIM_LIGHT_MODE=1 vim

Điều này hoạt động trong git:

$ git config --global core.editor 'VIM_LIGHT_MODE=1 vim'

Nhưng nếu tôi làm EDITOR='VIM_LIGHT_MODE=1 vim'và gõ Ctrl+xCtrl+evào vỏ, nó không hoạt động:

edit-command-line:13: command not found: VIM_LIGHT_MODE=1

Sau đó, tôi đã thử điều này : EDITOR="bash -c 'VIM_LIGHT_MODE=1 vim'", nhưng nó cũng thất bại:

vim': -c: line 1: syntax error: unexpected end of file

(Thành thật mà nói, cái này trông đặc biệt kỳ lạ, có vẻ như tôi hiểu sai về cách $EDITORsử dụng chính xác , và tôi sẽ rất vui nếu ai đó giải thích những gì đang diễn ra ở đây)

Tất cả các thí nghiệm khác cũng thất bại.

Cách hack duy nhất tôi có thể nghĩ đến là thiết lập một số servername, như:

$ vim --servername VIM_LIGHTWEIGHT_MODE

Và sau đó kiểm tra v:servernametrong vimscript, nhưng đây là một hack hoàn toàn : đây hoàn toàn không phải là tên máy chủ.

Vì vậy, có một cách sạch hơn để đạt được những gì tôi muốn?


2
Bạn có thể sử dụng env: EDITOR='env VIM_LIGHT_MODE=1 vim'.
gniourf_gniourf

3
Bạn cũng có thể sử dụng một tệp khởi tạo khác và chạy vimnhư vim -u .vimrc-light.
gniourf_gniourf

1
Oh .. cả hai ý tưởng của bạn đều tuyệt, cảm ơn. Và tôi đã không nhận ra env, shell-fu của tôi vẫn còn quá yếu. Hãy xem xét viết nó như một câu trả lời, để tôi có thể chấp nhận nó.
Dmitry Frank

Câu trả lời:


10

Có (ít nhất) hai khả năng:

  1. sử dụng env:

    EDITOR='/usr/bin/env VIM_LIGHT_MODE=1 vim'
    
  2. sử dụng vimvới một tệp khởi tạo khác, nói .vimrc-light:

    EDITOR='/usr/bin/vim -u ~/.vimrc-light'
    

3

Trong khi câu trả lời được chấp nhận chắc chắn là tốt hơn, tôi muốn thảo luận EDITOR="bash -c 'VIM_LIGHT_MODE=1 vim'". Vấn đề ở đây là EDITORđược gọi với các đối số và các đối số được truyền để bash -ckhông được chuyển tiếp tự động tới vim. Bạn cần sử dụng "$@":

EDITOR="bash -c 'VIM_LIGHT_MODE=1 vim \"\$@\"'

Tuy nhiên, đối số đầu tiên sau lệnh in bash -c$0, không phải là một phần của $@, vì vậy bạn cần sử dụng đối số giữ chỗ:

EDITOR="bash -c 'VIM_LIGHT_MODE=1 vim \"\$@\" lightvim' 

Với những cạm bẫy này, đó không phải là một lựa chọn tốt, nhưng dù sao cũng có thể thực hiện được.


0

Trên thực tế ý tưởng đầu tiên của bạn là có thể, theo một cách thanh lịch quá. Bạn có thể tạo một lệnh do người dùng xác định và sau đó gọi vim bằng +cú pháp.

Chỉ cần xác định một lệnh người dùng tùy chỉnh trong .vimrctệp của bạn như vậy:

command! CustomUserCommandName AnyVimCommandToExecute

Sau đó, từ dòng lệnh bạn có thể bắt đầu vim như vậy:

$ vim +CustomUserCommandName

Tôi đã sử dụng điều này trong .vimrcviệc ghi chú dễ dàng, như vậy:

" Note Taking {{{
command! Note execute "normal \<Plug>VimwikiMakeDiaryNote"
command! Notes execute "normal \<Plug>VimwikiDiaryIndex" | execute "normal \<Plug>VimwikiDiaryGenerateLinks"
" }}}

Điều này cho phép gọi nó với điều này vim +Note. Sau đó tạo một bí danh shell trong rctệp shell của bạn , để cho phép gọi dễ dàng hơn. Trong .bashrctập tin của tôi, tôi đặt bí danh cho các lệnh vim ở trên như thế này:

alias note="vim +Note"
alias notes="vim +Notes"

Giải pháp mẫu

Trong trường hợp của bạn, bạn có thể viết một cái gì đó dọc theo những dòng này trong .vimrctệp của bạn :

command! LightMode let g:lightmode=1

Sau đó kiểm tra chế độ ánh sáng theo bất kỳ cách nào bạn muốn trên mỗi cơ sở plugin hoặc các nhóm plugin, v.v ... bằng cách sử dụng ifcâu lệnh vim tương tự như trong .vimrctệp của bạn :

if exists("g:lightMode")
    " Do something cool with vim 
endif

Những điều cần lưu ý

  • Lệnh !sau vim command!có nghĩa là điều này sẽ ghi đè lên bất kỳ lệnh nào được xác định tương tự có cùng tên. Điều này là thích hợp hơn.
  • Các CustomUserCommandName PHẢI có chữ cái đầu tiên viết hoa
  • Bạn có thể không muốn làm ô nhiễm phạm vi toàn cầu của mình với g:bạn có thể sử dụng s:hoặc bất kỳ phạm vi nào phù hợp với nhu cầu của bạn.
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.