Lệnh là gì! -bang -nargs = * trong tệp vimrc?


9

Tôi đọc một tài liệu về vim và tác giả đề xuất một dòng mã nên được đặt trong .vimrc nhưng tôi hoàn toàn không biết nó là gì.

command! -bang -nargs=* Find call fzf#vim#grep('rg --column --line-number --no-heading --fixed-strings --ignore-case --no-ignore --hidden --follow --glob "!.git/*" --color "always" '.shellescape(<q-args>), 1, <bang>0)

Vì vậy, là những gì command!, -bang, -nargs, vv?

Câu trả lời:


15

Như mọi khi, sự giúp đỡ là người bạn tốt nhất của bạn:

:h :command:

:com[mand][!] [{attr}...] {cmd} {rep}

Xác định lệnh người dùng. Tên của lệnh là {cmd} và văn bản thay thế của nó là {rep}. Các thuộc tính của lệnh (xem bên dưới) là {attr}. Nếu lệnh đã tồn tại, một lỗi được báo cáo, trừ khi a! được chỉ định, trong trường hợp lệnh được xác định lại.

Do đó :command!được sử dụng để tạo một lệnh mới mà bạn có thể sử dụng từ dòng lệnh. Ở đây, lệnh mới là :Findvà nó được sử dụng để thực thi lệnh fzf#vim#grep()gọi plugin fzfsẽ cho phép tìm mờ một số tệp.

Các đối số khác được mô tả trong tài liệu:

  • :h :command-nargs -nargs được sử dụng để làm cho lệnh mới có thể đưa ra một đối số :Find arg1
  • :h :command-bang -bangđược sử dụng để làm cho lệnh mới có thể diễn giải một lượt !thích trong:Find!

Các !sau đúng commandđược sử dụng để nói vim để xác định lại các lệnh nếu nó đã tồn tại, theo cách này khi bạn nguồn của bạn .vimrcbạn không có một thông báo lỗi.

Đối với các đối số được truyền cho fzfhàm, tôi sẽ cho phép bạn đọc tài liệu của plugin để xem chúng làm gì :)


Bạn trả lời chính xác hơn doc. Vì vậy, nếu tôi chưa cài đặt fzf, điều đó nói rằng tôi muốn xác định một lệnh đơn giản hơn, lệnh command! -bang -nargs=* Find 'rg --column --line-number --no-heading --fixed-strings --ignore-case --no-ignore --hidden --follow --glob "!.git/*" --color "always"'này sẽ hoạt động?
Tuyền Phạm

1
@TuyenPham có thể không: mã trong bình luận của bạn tạo ra một lệnh Findsẽ được thay thế bởi rg --column etc...nhưng rgkhông phải là lệnh vim, nó là một đối số cho fzfhàm nên Vim sẽ báo lỗi. Nếu bạn muốn một ví dụ về một lệnh đơn giản, hãy xem lệnh này : command! DT windo diffthis. Nó tạo ra lệnh :DTkhông lấy một đối số hoặc bất cứ điều gì và bắt đầu diffmode trong vim. Phần {rep}của lệnh phải là một biểu thức mà vim hiểu.
statox

Tôi tin rằng những gì Tuyên đã đề cập trong rg là ripgrep, một công cụ khác trái ngược với FZF.
Jimmy MG Lim
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.