É possível inserir uma quebra de linha onde o cursor está no Vim sem entrar no modo de inserção? Aqui está um exemplo ( [x]
significa que o cursor está ativado x
):
if (some_condition) {[ ]return; }
Ocasionalmente, posso querer inserir mais algum código. Então, pressionaria ipara entrar no modo de inserção, pressione Enterpara inserir a quebra de linha e, em seguida, excluiria o espaço extra. Em seguida, entraria no modo normal e posicionaria o cursor antes da chave de fechamento e, em seguida, faria a mesma coisa para colocá-lo em sua própria linha.
Eu tenho feito isso há um tempo, mas certamente há uma maneira melhor de fazer isso?
vim
performance
text-editor
Mark A. Nicolosi
fonte
fonte
Respostas:
Para o exemplo que você deu, você poderia usar rEnterpara substituir um único caractere (o espaço) por Enter. Então, fspace.para avançar para o próximo espaço e repetir o último comando.
Dependendo das configurações de recuo automático, o acima pode ou não recuar a instrução de retorno corretamente. Caso contrário, use sEnterTabEscpara substituir o espaço por uma nova linha, recuar a linha e sair do modo de inserção. Você teria que substituir o segundo espaço por um comando diferente para que não pudesse usar '.' nesse caso.
fonte
>>
e<<
para ajudar a recuar se não quiser entrar no modo de inserção coms
.Veja como criar uma macro que insere uma nova linha no cursor sempre que você pressiona 'g' enquanto não está no modo de inserção:
No vim, digite:
Onde:
Você verá o seguinte na parte inferior da janela do vim até pressionar o Enter final:
Explicação:
[Ctrl + V] significa "citar o seguinte caractere" - permite que você insira a nova linha e os caracteres de escape no comando.
Então, você está mapeando a tecla 'g' para a sequência:
Este é o vim para inserir uma nova linha antes do cursor e, em seguida, sair do modo de inserção .
Ajustes:
f}i^M^[O
- Isso vai f ind o } e i NSERT outra nova linha, em seguida, fugir do modo de inserção e O pen uma linha vazia para que você digite mais código.Aproveitar!
fonte
Um mapeamento simples para quebrar a linha do cursor pressionando Ctrl + Enter:
essencialmente entra no modo 'inserir', insere uma quebra de linha e volta ao modo normal.
coloque-o em seu arquivo .vimrc para uso futuro.
fonte
Se você costuma expandir um bloco de uma linha para três linhas, tente a substituição. Mude o colchete de abertura para colchete / retorno, e o colchete de fechamento para retorno / colchete.
O comando para substituir colchete / retorno de colchete tem a seguinte aparência:
Como você deseja usar isso com frequência, pode mapear a sequência completa para um pressionamento de tecla não usado como este:
Onde você vir ^ M na sequência, digite [Ctrl-V] e pressione enter .
Agora, com o cursor em qualquer lugar na linha de amostra, pressione a tecla mapeada e os retornos de carro são adicionados.
Verifique os
:help map-which-keys
conselhos sobre como selecionar as teclas não utilizadas para mapear.fonte
g
não é mapeado porque é usado como chave de 'namespace' para muitos mapeamentos de vim que consistem em duas combinações de teclas (consulte:h g
). Portanto, este mapeamento é realmente impossível.g
já está em uso como uma chave de 'namespace'?:help g
é uma maneira de ver uma lista deg
mapeamentos padrão + algo.z
,[
]
são outras chaves de 'namespace', consulte, por exemplo:help index
. Você pode invocar:verbose map g
para ver todos os mapeamentos definidos no momento, começando com g. Webresources úteis são viemu.com/vi-vim-cheat-sheet.gif , vimcasts.org/blog/2014/02/follow-my-leader , vimeo.com/85343734 (slides: speakerdeck.com/nelstrom/follow-my -leader )Supondo que você esteja bem com o mapeamento
K
para outra coisa (escolha uma chave diferente de sua preferência) e usando o marcador'
como um marcador temporário, tudo bem, por que não fazer isso?agora, pressionar K no modo normal sobre o caractere após o qual você deseja que ocorra a quebra de linha dividirá a linha e deixará o cursor onde estava.
fonte
O Vim eliminará automaticamente qualquer espaço em branco à direita do cursor se você quebrar uma linha em duas enquanto
autoindent
(ou qualquer outro auxílio de recuo) estiver habilitado.Se você não quiser usar qualquer uma dessas configurações, use
s
em vez dei
no fim de s ubstitute seu novo texto para o espaço em branco em vez de apenas inserir. (Se houver vários espaços em branco, coloque o cursor à esquerda e use em seucw
lugar.)fonte
Basicamente, ao dividir uma linha, você quer apenas inserir um retorno de carro ou, no caso de estar em um espaço, substitua-o por um retorno de carro. Bem, por que se contentar com um ou outro? Aqui está meu mapeamento para K:
Eu uso o operador ternário para condensar as duas ações em um mapa-chave. Dividindo-o,
<expr>
significa que a saída do mapa-chave pode ser dinâmica e, neste caso, depende da condiçãogetline('.')[col('.')-1]==' '
que é a longa maneira de perguntar ao vim se o caractere sob o cursor é um espaço. Finalmente, o operador ternário familiar? :
substitui o espaço por quebra de linha (r<CR>
) ou insere um novo (i<CR><Esc>
)Agora você tem um adorável mapa de teclas irmãs para o
J
comando.fonte
Defina este mapeamento de teclas em seu vimrc
Em seguida, pressione Ctrl + m se quiser usá-lo em seu vim.
fonte
IMHO, o mapeamento embutido
gs
não é um mapeamento útil (colocar o vim para dormir), pode-se usar isso para dividir:fonte
No Vrapper, você pode usar o gql, que divide uma linha sem entrar no modo de inserção, mas nem sempre mantém o recuo.
fonte
Na verdade, você precisa das seguintes operações combinadas:
:
para entrar no Modo de Comandos/\s/\r/g
fonte
Se você tiver a informação:
e deseja produzir
Você pode usar o comando
fonte
Eu descobri que esta é a implementação mais fiel do que eu esperava que o comportamento oposto
J
Ele faz a nova linha simplista no cursor, cuida de qualquer espaço em branco à direita na linha anterior, se houver algum presente, e então retorna o cursor para a posição correta.
i <cr> <esc> - esta é uma das soluções mais comuns sugeridas, ela não exclui caracteres que não sejam de espaço em branco sob o seu cursor, mas também deixa você com espaços em branco à direita
^mw - vá para o início da nova linha e crie uma marca sob
w
gk - subir uma linha
:silent! s/\v +$//<cr> - regex substitui qualquer espaço em branco no final da linha
:noh<cr> - Limpe qualquer pesquisa destacando que o regex pode ter sido ativado
`w - devolver a marca sob
w
Combina essencialmente o melhor de ambos r<esc><cr>ei<cr><esc>
Observação: eu tenho esse limite Sque potencialmente sobrescreve uma chave útil, mas é um sinônimo de cce, como não o uso com tanta frequência como faço as divisões, posso sobrescrevê-lo.
fonte
o
ESC
comando vai fazer isso por você.fonte
Esse mapeamento quebrará qualquer função de uma linha que você tenha. Basta colocar o cursor na linha e clicar em 'g' no modo normal:
Isso pressupõe que você tenha um espaço após a chave de abertura e um espaço antes da chave de fechamento. Veja se isso funciona para você.
fonte