crie seus próprios trechos
Eu sou bastante novo no vim. E não gosto muito de instalar muitos pacotes.
Eu uso html, javascript e react.js, e gostaria de criar uma maneira simples de digitar e ter o snippet correto no arquivo.
Seriam apenas 5 ou 6 fragmentos, você pode me dar uma mão sobre por onde começar a aprender essa arte?
Editar
Existem 2 ideias em minha mente (literalmente).
- Um atalho que renderiza um pedaço de texto (supondo que seja possível). Talvez este pedaço de texto sendo incluído no .vimrc ou em algum lugar?
- Os plug-ins que verifiquei consistem em digitar algo e expandir isso usando uma das guias ou algum pressionamento de tecla específico.
Um exemplo concreto é o cabeçalho html e outro é um componente de reação, como este:
class className extends React.Component{
constructor(){
super()
this.state = {}
}
render(){
return
}
}
O snippet html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="author" content=" " />
<meta name="description" content=" " />
<title>Title Here</title>
<link rel="stylesheet" href="index.css">
</head>
<body>
</body>
</html>
Para este último, existe o emmet-vim, mas ainda assim prefiro fazer do meu jeito, pelo menos no que diz respeito a trechos longos.
Respostas
TL; DR : Confira:help abbreviations.
Exemplo:
Digamos que eu queira fazer um snippet para criar rapidamente um objeto JavaScript no seguinte formato com a abreviação "obj" ( |representa a posição do cursor após fazer a abreviação):
var foo = {|};
Eu poderia fazer:
iabbrev obj var foo = {};<Left><Left>
Então, sempre que eu digitar objno modo de inserção seguido por um caractere não-palavra-chave (geralmente <Space>ou <Esc>/ <c-]>), ele será expandido (observe que se <Space>for pressionado, ele irá inserir um espaço antes do cursor. Um método para evitar este comportamento é descrito em a página de ajuda para abbreviations)
Se por algum motivo você não quiser expandir sua abreviatura, você pode pressionar <c-v>antes de inserir o caractere não-palavra-chave.
Vejo:
:h abbreviations
:h :iabbrev
:h 'iskeyword'
Edite para sua edição:
Para um de seus exemplos específicos (Componente React), você poderia fazer:
iabbrev rc class className extends React.Component{<CR>
\constructor(){<CR>
\super()<CR>
\this.state = {}<CR>
\}<CR>
\render(){<CR>
\return<CR>
\}<CR>
\}
Eu costumava \formatar mais bonito, mas acho que você poderia colocar tudo em uma linha:
iabbrev rc class className extends React.Component{<CR>constructor(){<CR>super()<CR>this.state = {}<CR>}<CR>render(){<CR>return<CR>}<CR>}
mas boa sorte trabalhando com isso. Vale a pena observar é \ignorar os espaços em branco precedentes, portanto, o recuo não faz nada além de ajudar a organizar a abreviação.
Isso funcionaria para qualquer abreviação estática que você queira fazer, incluindo seu exemplo de HTML, mas isso é para você descobrir :).
Você poderia usar abreviações como costumávamos fazer 2 décadas atrás, mas eu não recomendaria para trechos de multilinhas como os que você mostrou.
Claro que é possível usar abreviações. Como podemos fazer com as abreviações quase tudo o que podemos fazer com os plug - ins de snippet - nos detalhes que você deseja consumir o espaço extra que estará inserindo com o :iabcomando padrão e, possivelmente, para neutralizar algumas abreviações de expandir dentro comentários ou strings.
Qual é o problema com abreviações com várias linhas? Eles são simplesmente insustentáveis. Adicione o movimento do cursor e precisaremos rapidamente de alguns ajudantes para aliviar a dor. Veja, por exemplo, uma abreviatura simples que tenho para C e C ++ .
Inoreabbr <buffer> <silent> if <C-R>=lh#cpp#snippets#def_abbr('if ',
\ '\<c-f\>if(!cursorhere!){!mark!}!mark!')<cr>
Todas as máquinas extras ( :Inoreabbr, lh#cpp#..., !cursorhere!, !mark) algumas coisas extras que eu tinha que definir para cuidar de comer o espaço extra, movendo o cursor, definindo espaços reservados / salto posições, neutralizando a expansão nos comentários ou cordas, aplicando estilísticas / opções de formatação (espaços e novas linhas podem ser inseridos antes / depois dos colchetes ...).
O equivalente a um mecanismo de snippet pode ser semelhante a
if(<+cond+>){<+code+>}
Vários mecanismos de snippet mostram diferentes variações de sintaxe. A sintaxe acima é do plugin que estou mantendo (e que também pode aplicar a formatação instantânea). Escolha um plugin entre os vários existentes . Será muito mais simples no longo prazo.
Reserve abreviações para coisas simples, ou porque você realmente não quer nada além da tecla de espaço para acionar a expansão de seus trechos.
Se você não quiser usar ferramentas de expansão de texto, você pode colocar cada fragmento em um arquivo vim separado e simplesmente ler o fragmento (arquivo) que você precisa :r snippet1(ou qualquer nome de arquivo que você deu ao fragmento pretendido). Você precisa estar no modo normal para fazer isso.
Certifique-se de que o Vim saiba qual diretório contém seus snippets.