O que é comando! -bang -nargs = * em um arquivo vimrc?

9

Li um documento sobre o vim e o autor sugere uma linha de código que deve ser inserida no .vimrc, mas não tenho idéia do que seja.

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)

Então, o que é command!, -bang, -nargs, etc?

Tuyen Pham
fonte

Respostas:

15

Como sempre, a ajuda é sua melhor amiga:

:h :command:

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

Defina um comando do usuário. O nome do comando é {cmd} e seu texto de substituição é {rep}. Os atributos do comando (veja abaixo) são {attr}. Se o comando já existir, um erro será relatado, a menos que a! é especificado; nesse caso, o comando é redefinido.

Assim, :command!é usado para criar um novo comando que você pode usar na linha de comando. Aqui está o novo comando :Finde ele é usado para executar fzf#vim#grep()qual é uma chamada para o plug-in fzfque permitirá encontrar alguns arquivos difusos.

Os outros argumentos estão descritos na documentação:

  • :h :command-nargs -nargs é usado para tornar o novo comando capaz de levar um argumento :Find arg1
  • :h :command-bang -bangé usado para fazer o novo comando capaz de interpretar um !como em:Find!

O !logo a seguir commandé usado para dizer ao vim para redefinir o comando, se ele já existir; dessa maneira, quando você origina o seu, .vimrcvocê não tem uma mensagem de erro.

Quanto aos argumentos passados ​​para a fzffunção, vou deixar você ler o documento do plugin para ver o que eles fazem :)

statox
fonte
Você responde é mais preciso que o doc. Então, se eu não tiver o fzf instalado, isso significa que gostaria de definir um comando mais simples, esse comando command! -bang -nargs=* Find 'rg --column --line-number --no-heading --fixed-strings --ignore-case --no-ignore --hidden --follow --glob "!.git/*" --color "always"'funcionará?
Tuyen Pham
11
@TuyenPham provavelmente não: o código no seu comentário cria um comando Findque será substituído por, rg --column etc...mas rgnão é um comando vim, é um argumento para a fzffunção, portanto o Vim repetirá um erro. Se você quiser um exemplo de um simples comando de ver este: command! DT windo diffthis. Ele cria o comando :DTque não aceita argumentos nem nada e que inicia o diffmode no vim. A {rep}parte do comando deve ser uma expressão que o vim entenda.
Statox
Acredito que Tuyen estava se referindo em rg é ripgrep, outra ferramenta em oposição à FZF.
Jimmy MG Lim