Deve ser trivial e pode até ajudar, mas não consigo descobrir como navegá-lo. Como recuo várias linhas rapidamente no vi?
Deve ser trivial e pode até ajudar, mas não consigo descobrir como navegá-lo. Como recuo várias linhas rapidamente no vi?
Respostas:
Use o >comando Para recuar cinco linhas 5>>,. Para marcar um bloco de linhas e recuar, Vjj>recuar três linhas (somente Vim). Para recuar um bloco de chaves, coloque o cursor em uma das chaves e use >%ou de qualquer lugar dentro do bloco >iB.
Se você estiver copiando blocos de texto e precisar alinhar o recuo de um bloco em seu novo local, use em ]pvez de apenas p. Isso alinha o bloco colado com o texto ao redor.
Além disso, a shiftwidth
configuração permite controlar quantos espaços recuar.
shiftwidth
configuração para saber como mudar isso.
Esta resposta resume as outras respostas e comentários desta pergunta e adiciona informações extras com base na documentação do Vim e no wiki do Vim . Por questões de concisão, esta resposta não distingue entre comandos específicos do Vi e do Vim.
Nos comandos abaixo, "recuar" significa "recuar linhas de acordo com as configurações de recuo ". shiftwidth
é a variável principal que controla o recuo.
Comandos Gerais
>> Indent line by shiftwidth spaces
<< De-indent line by shiftwidth spaces
5>> Indent 5 lines
5== Re-indent 5 lines
>% Increase indent of a braced or bracketed block (place cursor on brace first)
=% Reindent a braced or bracketed block (cursor on brace)
<% Decrease indent of a braced or bracketed block (cursor on brace)
]p Paste text, aligning indentation with surroundings
=i{ Re-indent the 'inner block', i.e. the contents of the block
=a{ Re-indent 'a block', i.e. block and containing braces
=2a{ Re-indent '2 blocks', i.e. this block and containing block
>i{ Increase inner block indent
<i{ Decrease inner block indent
Você pode substituir {
por }
ou B
, por exemplo, =iB
é um comando de indentação de bloco válido. Dê uma olhada em "Recuar um bloco de código" para obter um bom exemplo para experimentar esses comandos.
Lembre-se também que
. Repeat last command
, para que os comandos de indentação possam ser repetidos de maneira fácil e conveniente.
Re-recuando arquivos completos
Outra situação comum está exigindo que o recuo seja corrigido em um arquivo de origem:
gg=G Re-indent entire buffer
Você pode estender essa ideia para vários arquivos:
" Re-indent all your C source code:
:args *.c
:argdo normal gg=G
:wall
Ou vários buffers:
" Re-indent all open buffers:
:bufdo normal gg=G:wall
No modo visual
Vjj> Visually mark and then indent three lines
No modo de inserção
Estes comandos se aplicam à linha atual:
CTRL-t insert indent at start of line
CTRL-d remove indent at start of line
0 CTRL-d remove all indentation from line
Comandos Ex
Isso é útil quando você deseja recuar um intervalo específico de linhas, sem mover o cursor.
:< and :> Given a range, apply indentation e.g.
:4,8> indent lines 4 to 8, inclusive
Recuar usando marcadores
Outra abordagem é através de marcadores :
ma Mark top of block to indent as marker 'a'
... mova o cursor para o local final
>'a Indent from marker 'a' to current location
Variáveis que governam o recuo
Você pode configurá-los no seu arquivo .vimrc .
set expandtab "Use softtabstop spaces instead of tab characters for indentation
set shiftwidth=4 "Indent by 4 spaces when using >>, <<, == etc.
set softtabstop=4 "Indent by 4 spaces when pressing <TAB>
set autoindent "Keep indentation from previous line
set smartindent "Automatically inserts indentation in some cases
set cindent "Like smartindent, but stricter and more customisable
O Vim possui recuo inteligente baseado no tipo de arquivo. Tente adicionar isso ao seu .vimrc:
if has ("autocmd")
" File type detection. Indent based on filetype. Recommended.
filetype plugin indent on
endif
Referências
>}
. Obrigado por muito tempo
Uma grande seleção seria:
gg=G
É realmente rápido, e tudo fica recuado ;-)
gg=G
apenas coloca todas as linhas a partir da posição 1. Todos os espaços em branco foram removidos. Existe algo mais específico para XML?
set cindent
deve estar em vimrc ou deve ser executado :set cindent
antes de executar esse comando
Além disso, tente isso para C-recuar recuo. Faça :help =
para obter mais informações:
={
Isso indentará automaticamente o bloco de código atual em que você está.
Ou apenas:
==
para recuar automaticamente a linha atual.
Teclas pressionadas para pessoas mais visuais:
Entre no modo de comando:
Escape
Mova-se para o início da área para recuar:
hjkl↑↓←→
Inicie um bloco:
v
Mova-se para o final da área para recuar:
hjkl↑↓←→
(Opcional) Digite o número de níveis de recuo que você deseja
0..9
Execute o recuo no bloco:
>
O mestre de todos os comandos é
gg=G
Isso recua o arquivo inteiro!
E abaixo estão alguns dos comandos simples e elegantes usados para recuar linhas rapidamente no Vim ou gVim.
Para recuar a linha atual
==
Para recuar todas as linhas abaixo da linha atual
=G
Para recuar n
linhas abaixo da linha atual
n==
Por exemplo, para recuar 4 linhas abaixo da linha atual
4==
Para recuar um bloco de código, vá para um dos chavetas e use o comando
=%
Estes são os comandos mais simples, porém poderosos, para recuar várias linhas.
vim
, não vi
.
vim
que foi vinculado como vi
?
Além da resposta já dada e aceita, também é possível colocar um marcador e depois recuar tudo, desde o cursor atual até o marcador.
Portanto, insira ma
onde você quer o topo do bloco recuado, mova o cursor para baixo o quanto precisar e digite >'a
(observe que " a
" pode ser substituído por qualquer nome de marcador válido). Às vezes é mais fácil que 5>>
ou vjjj>
.
Ir para o início do texto
Além das soluções oferecidas, gosto de fazer um parágrafo de cada vez com >}
Quando você seleciona um bloco e usa >para recuar, ele recua e volta ao modo normal. Eu tenho isso no meu arquivo .vimrc:
vnoremap < <gv
vnoremap > >gv
Permite recuar sua seleção quantas vezes quiser.
Suponha que você use 2 espaços para recuar seu código. Tipo:
:set shiftwidth=2
Então:
Você entendeu a ideia.
( As linhas vazias não serão recuadas, o que eu acho meio legal. )
Encontrei a resposta na documentação do (g) vim para indentar blocos:
:help visual-block
/indent
Se você quiser contar o comando, faça isso antes de digitar o caractere do operador: "v {move-around} 3>" (mova as linhas 3 recuos para a direita).
A beleza da interface do usuário do Vim é a sua consistência. Os comandos de edição são compostos pelo comando e um cursor se move. Os movimentos do cursor são sempre os mesmos:
'
.Portanto, para usar o vim, você precisa aprender a mover o cursor e lembrar de um repertório de comandos como, por exemplo, >recuar (e <"superar").
Portanto, para recuar as linhas da posição do cursor até a parte superior da tela >H, >Grecue até a parte inferior do arquivo.
Se, em vez de digitar >H, você digitar dH, estará excluindo o mesmo bloco de linhas, cHpara substituí-lo, etc.
Alguns movimentos do cursor se encaixam melhor com comandos específicos. Em particular, o %comando é útil para recuar todo um bloco HTML ou XML. Se o arquivo tiver a sintaxe destacada ( :syn on
), a configuração do cursor no texto de uma tag (como, no "i" de <div> e a inserção >%irá recuar até a tag de fechamento </div>.
É assim que o Vim funciona: é preciso lembrar apenas os movimentos do cursor e os comandos, e como misturá-los. Portanto, minha resposta a essa pergunta seria "vá para uma extremidade do bloco de linhas que você deseja indentar e digite o >comando e um movimento para a outra extremidade do bloco" se indent for interpretado como deslocamento das linhas, =se indent é interpretado como em impressão bonita.
Faça isso:
$vi .vimrc
E adicione esta linha:
autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent
Isso é apenas para um arquivo cpp. Você pode fazer isso para outro tipo de arquivo, também apenas modificando o tipo de arquivo ...
Você pode usar o norm i
comando para inserir o texto fornecido no início da linha. Para inserir 10 espaços antes das linhas 2-10:
:2,10norm 10i
Lembre-se de que deve haver um caractere de espaço no final do comando - este será o caractere que queremos inserir. Também podemos recuar uma linha com qualquer outro texto, por exemplo, para recuar todas as linhas de um arquivo com cinco caracteres sublinhados:
:%norm 5i_
Ou algo ainda mais chique:
:%norm 2i[ ]
Um exemplo mais prático é comentar o código Bash / Python / etc com # character:
:1,20norm i#
Para reentrar o uso em xvez de i. Por exemplo, para remover os 5 primeiros caracteres de cada linha:
:%norm 5x
Uma maneira rápida de fazer isso usando VISUAL MODE
o mesmo processo que comentar um bloco de código.
Isso é útil se você preferir não alterar suas diretivas shiftwidth
ou usá- set
las, e é flexível o suficiente para trabalhar com TABS ou SPACES ou qualquer outro caractere.
-- VISUAL MODE --
:
para alternar para o promptSubstituindo por 3 espaços à esquerda:
:'<,'>s/^/ /g
Ou substituindo pelas guias principais:
:'<,'>s/^/\t/g
Breve explicação:
'<,'>
- Dentro da faixa visualmente selecionada
s/^/ /g
- Insira 3 espaços no início de cada linha em todo o intervalo
(ou)
s/^/\t/g
- Insira Tab
no início de cada linha dentro de toda a faixa
Eu gosto de marcar o texto para indentação:
PS: você pode usar a :'a,'ztécnica para marcar um intervalo para qualquer operação (d, y, s ///, etc.) em que possa usar linhas, números ou %.
:help left
Em ex mode
você pode usar :left
ou :le
alinhar linhas uma quantidade especificada. Especificamente, :left
a esquerda alinhará as linhas no [intervalo]. Define o recuo nas linhas para [recuo] (padrão 0).
:%le3
ou :%le 3
ou :%left3
ou :%left 3
alinhará o arquivo inteiro preenchendo três espaços.
:5,7 le 3
alinhará as linhas 5 a 7 preenchendo-as com três espaços.
:le
sem nenhum valor ou :le 0
ficará alinhado com um preenchimento de 0.
Isso funciona no Vim e no gVim.
:'<,'>le4
inserir os espaços. Obrigado!
Para mim, a solução MacVim (Visual) foi, selecione com o mouse e pressione ">", mas depois de colocar as seguintes linhas em "~ / .vimrc", pois gosto de espaços em vez de guias:
set expandtab
set tabstop=2
set shiftwidth=2
Também é útil poder chamar o MacVim a partir da linha de comando (Terminal.app), portanto, como eu tenho o seguinte diretório auxiliar "~ / bin", onde coloco um script chamado "macvim":
#!/usr/bin/env bash
/usr/bin/open -a /Applications/MacPorts/MacVim.app $@
E, claro, em "~ / .bashrc":
export PATH=$PATH:$HOME/bin
O MacPorts mexe muito com "~ / .profile", portanto a variável de ambiente PATH pode ficar bastante longa.
5==
recuará cinco linhas da posição atual do cursor.
Então você pode digitar qualquer número antes ==
. Indentará o número de linhas. Este está no modo de comando.
gg=G
recuará o arquivo inteiro de cima para baixo.
Como não encontrei um método usado nos comentários, vou compartilhá-lo (acho que apenas o Vim):
Isso é útil quando você não deseja alterar as configurações de recuo / guia vimrc
ou lembrar-se de alterá-lo durante a edição.
Para descontrair, uso o mesmo bloco Ctrl+ Vpara selecionar espaços e excluí-lo com D.
Não sei por que é tão difícil encontrar uma resposta simples como esta ...
Eu mesmo tive que lutar muito para saber disso. É muito simples:
.vimrc
arquivo no diretório inicial.Adicione esta linha
set cindent
no arquivo em que deseja recuar corretamente.
No modo normal / comando, digite
10== (This will indent 10 lines from the current cursor location)
gg=G (Complete file will be properly indented)
:line_num_start,line_num_end>
Por exemplo,
14,21> shifts line number 14 to 21 to one tab
Aumente o símbolo '>' para mais guias.
Por exemplo,
14,21>>> for three tabs
:set number
para alternar os números de linha (eles estão desativados por padrão) ou colocar set number
no seu vimrc.
Usando muito o Python, me vejo precisando frequentemente de mudar os blocos em mais de um recuo. Você pode fazer isso usando qualquer um dos métodos de seleção de bloco e, em seguida, basta inserir o número de indentações que deseja pular logo antes do>
Por exemplo, V5j3>
irá recuar cinco linhas três vezes - que são 12 espaços se você usar quatro espaços para recuos.
Opção 1: Recue um bloco de código no vi a três espaços com o modo Visual Block:
Selecione o bloco de código que deseja recuar. Faça isso usando Ctrl+Vo modo normal e com a seta para baixo para selecionar o texto. Enquanto estiver selecionado, digite :
para dar um comando ao bloco de texto selecionado.
O seguinte aparecerá na linha de comando: :'<,'>
Para definir o recuo em três espaços, digite le 3
e pressione enter. Isto é o que aparece::'<,'>le 3
O texto selecionado é imediatamente recuado para três espaços.
Opção 2: indentar um bloco de código no vi a três espaços com o modo Visual Line:
Esteja no modo normal e pressione as seguintes teclas:
Vjjjj:le 3
Interpretação do que você fez:
V
significa começar a selecionar o texto.
jjjj
setas abaixo de quatro linhas, destacando quatro linhas.
:
diz ao vi que você inserirá uma instrução para o texto destacado.
le 3
significa recuar o texto destacado três linhas.
O código selecionado é imediatamente aumentado ou diminuído para recuo de três espaços.
Opção 3: use o modo Visual Block e o modo de inserção especial para aumentar o recuo:
No modo normal, pressione as seguintes teclas:
Ctrl+V
jjjj
(pressione a barra de espaço cinco vezes)
Esc Shift+i
Todo o texto destacado é recuado cinco espaços adicionais.
Eu uso a seleção visual em modo de bloco:
I
( Shift+ I) para entrar no modo de inserção.Este não é um uni-tasker. Funciona:
c
vez de I
).vim-prettier
vez do mecanismo de recuo padrão). De >
outro modo, o uso de um modo real permitirá a formatação feita por Prettier.
Para recuar todo o arquivo por quatro:
esc 4G=G
Fonte: https://www.fir3net.com/UNIX/General/how-do-i-tab-multiple-lines-within-vi.html