Pergunta

Deve ser trivial, e pode até ser na ajuda, mas eu não consigo descobrir como navegar ele. Como eu recuar várias linhas rapidamente no vi?

Foi útil?

Solução

Use o > comando. Para travessão 5 linhas, 5 > > . Para marcar um bloco de linhas e recuar lo, (apenas o vim) V j j > para travessão 3 linhas . Para recuar um bloco-chaves, coloque o cursor sobre uma das chaves e uso > % ou de qualquer lugar dentro uso bloco > < kbd> i B .

Se você está copiando blocos de texto ao redor e necessidade de alinhar o travessão de um bloco em sua nova localização, uso ] p em vez de apenas p . Este alinha o bloco colado com o texto circundante.

Além disso, o href="http://vimdoc.sourceforge.net/htmldoc/options.html#'shiftwidth'" rel="noreferrer"> shiftwidth configuração

Outras dicas

Esta resposta resume as outras respostas e comentários de esta questão, e adiciona informação extra baseado no Vim documentação eo Vim wiki . Para concisão, esta resposta não faz distinção entre Vi e comandos específicos do Vim.

Nos comandos abaixo, "re-indent" significa "linhas de recuo de acordo com sua recuo configurações ". shiftwidth é a principal variável que os controles de recuo.

Comandos Geral

>>   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 { com } ou B, por exemplo, =iB é um comando válido bloco travessão. Dê uma olhada na "recuar um bloco de código" para um exemplo bom para tentar estes comandos para fora.

Além disso, lembre-se que

.    Repeat last command

, então comandos de recuo pode ser facilmente e convenientemente repetido.

Re-recuar arquivos completos

Outra situação comum está exigindo recuo para ser fixado ao longo de um arquivo de origem:

gg=G  Re-indent entire buffer

Você pode estender essa idéia 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 Visual Modo

Vjj> Visually mark and then indent 3 lines

No modo de inserção

Estes comandos se aplicam a 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

Ex comandos

Estes são úteis quando você deseja recuar um intervalo específico de linhas, sem mover a cursor.

:< and :> Given a range, apply indentation e.g.
:4,8>   indent lines 4 to 8, inclusive

recuo usando marcadores

Outra abordagem é através marcadores :

ma     Mark top of block to indent as marker 'a'

... mover o cursor para o local final

>'a    Indent from marker 'a' to current location

As variáveis ??que governam recuo

Você pode definir estes em sua Vimrc arquivo .

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 tem recuo inteligente baseado em filetype. Tente adicionar isso ao seu .vimrc:

if has ("autocmd")
    " File type detection. Indent based on filetype. Recommended.
    filetype plugin indent on
endif

Referências

Um grande seleção seria:

gg=G

É muito rápido, e tudo fica recuado; -)

Além disso, tente isso para C-recuando recuo, fazer :help = para mais informações:

={

que se auto-travessão do bloco de código atual em que está.

Ou apenas:

==

para auto-travessão da linha atual.

teclas pressionadas para as pessoas mais visuais:

  1. Entre no Modo de Comando:
    Fuga

  2. Mover-se para o início da área para travessão:
    h j k l ? ? ? ?

  3. Iniciar um bloco:
    v

  4. Se deslocar para o fim da área para travessão:
    h j k l ? ? ? ?

  5. (Opcional) Digite o número de níveis de recuo que você quer
    0..9

  6. Executar o recuo no bloco:
    >

Além da resposta já dada e aceito, também é possível colocar um marcador e tudo então travessão do cursor atual para o marcador. Assim, entrar ma onde deseja que a parte superior de seu bloco recuado, o cursor para baixo, tanto quanto você precisa e, em seguida, digite >'a (note que "a" pode ser substituído por qualquer nome de marcador válido). Isso às vezes é mais fácil do que 5>> ou vjjj>.

O mestre de todos os comandos é
gg=G

Este travessões o arquivo inteiro!

E abaixo estão alguns dos simples e comandos elegantes usados ??para linhas de recuo rapidamente no Vim ou gVim.

Para recuar a linha atual
==

Para recuar as todas as linhas abaixo da linha atual

=G

Para linhas n travessão abaixo da linha atual

n==

Por exemplo, ao travessão 4 linhas abaixo da linha de corrente

4==

Para recuar um bloco de código, vá até uma das chaves e comandos uso

=%

Estes são os mais simples, ainda comandos poderosas para várias linhas de recuo.

Vá para o início do texto

  • pressione v para o modo visual.
  • uso se / para baixo seta para realçar o texto.
  • pressione = para travessão todas as linhas que você destacou.

Assim como as soluções oferecidas, eu gosto de fazer as coisas um parágrafo de cada vez com >}

Quando você seleciona um bloco e uso > para travessão, ele recua depois volta ao modo normal. Eu tenho isso no meu arquivo .vimrc:

vnoremap < <gv

vnoremap > >gv

Ele permite que você recuar sua seleção quantas vezes quiser.

Suponha que você usar 2 espaços para recuar seu código. Tipo:

:set shiftwidth=2
  • Digite v (para entrar bloco visuais modo de edição)
  • mover o cursor com as setas (ou com h / j / k / l ) para destacar as linhas que você deseja recuar ou unindent.

Depois:

  • Digite > para travessão uma vez (2 vagas).
  • Digite 2 > para travessão duas vezes (4 vagas).
  • Digite 3 > para travessão três vezes (6 lugares).
  • ...
  • Digite < para unindent uma vez (2 vagas).
  • Digite 2 < para unindent duas vezes (4 vagas).
  • Digite 3 < para unindent três vezes (6 lugares).
  • ...

Você começa a idéia.

( linhas vazias não vai ficar recuado, o que eu acho que é uma espécie de bom. )


Eu encontrei a resposta na (g) documentação vim para recuar blocos:

:help visual-block
/indent

Se você quiser dar uma contagem para o comando, fazer isso pouco antes de digitação o personagem operador: "v {movimento-around} 3>" (linhas de movimentação 3 travessões à direita).

A beleza da UI do vim é que é consistente. comandos de edição são compostas de comando e um movimento do cursor. O cursor se move são sempre os mesmos:

  • H a parte superior da tela, G para baixo, M a meio
  • n G para ir para a linha n, G sozinho para o fundo do arquivo, g g para cima
  • n para passar para a próxima partida pesquisa, N para anterior
  • } para o fim do parágrafo
  • % para o próximo suporte de correspondência, um dos parênteses ou o tipo tag
  • digite para a próxima linha
  • ' x para marca x, onde x é uma letra ou outra'
  • muitos mais, incluindo w e W por palavra, $ ou 0 para pontas da linha, etc, que não se aplicam aqui porque não são linha movimentos.

Assim, a fim de usar vim você tem que aprender a mover o cursor e lembrar um repertório de comandos como, por exemplo, > para travessão (e < para "Outdent").
Assim, para recuar as linhas da posição do cursor para o topo da tela você faz > H , > G para travessão para a parte inferior do arquivo.

Se, em vez de digitar > H , você digita d H , então você está excluindo o mesmo bloco de linhas, c H para substitui-lo, etc.

Alguns movimentos do cursor se encaixam melhor com comandos específicos. Em particular, o comando % é útil para recuar um HTML todo ou bloco XML.
Se o arquivo tem uma sintaxe realçada (:syn on), em seguida, definir o cursor no texto de uma tag (como, no "i" de

e entrando > % vai travessão até o fechamento
tag.

Esta é a forma como vim obras: é preciso lembrar apenas os movimentos do cursor e os comandos, e como misturá-los
. Assim, a minha resposta a esta pergunta seria "ir para uma extremidade do bloco de linhas que você quer travessão, e, em seguida, digite o > comando e um movimento para o outro lado do bloco" se travessão é interpretado como deslocando as linhas, = se travessão é interpretado como na impressão bonita.

fazer isso

$vi .vimrc

e adicionar esta linha

autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent

Este é apenas para cpp que você pode fazer isso para outro tipo de arquivo também acaba modificando o filetype ...

Uma maneira rápida de fazer isso usando VISUAL MODE usa o mesmo processo que comentar um bloco de código.

Isto é útil se você preferir não alterar o seu shiftwidth ou usar quaisquer directivas set e é bastante flexível para trabalhar com tabulações ou espaços ou qualquer outro caractere.

  1. cursor Posição no início no bloco
  2. v para mudar para -- VISUAL MODE --
  3. Selecione o texto a ser recuado
  4. Tipo : para alternar para o prompt
  5. Substituir com 3 espaços principais:

    :'<,'>s/^/ /g

  6. Ou substituindo com as principais guias:

    :'<,'>s/^/\t/g

  7. Breve Explicação:

    '<,'> - dentro da faixa Visualmente selecionado

    s/^/ /g - Inserir 3 espaços no início de cada linha em toda a gama

    (ou)

    s/^/\t/g - Inserir Tab no início de cada linha em toda a gama

Eu gosto de texto marca para recuo:

  1. Ir para o início da linha de texto, em seguida, digite ma (a é o rótulo do 'm'ark: poderia ser qualquer letra)
  2. ir para terminar linha de texto e tipo mz (novamente z poderia ser qualquer letra)
  3. : 'a' z> ou: 'a' z <(? Isso é uma palavra) vai recuar ou Outdent
  4. Voila! o texto é movido (linhas vazias permanecem vazias sem espaços)

PS: é possível utilizar: 'a,' z técnica para marcar um intervalo para qualquer operação (d, y, s ///, etc), onde pode utilizar linhas, números, ou%

>} ou travessão >{ da linha atual até o próximo parágrafo

<} ou <{ mesmo un-indent

Não é mais uma forma que não tenha sido mencionado ainda - você pode usar o comando norm i para inserir texto dado no início da linha. Para inserir 10 espaços antes linhas 2-10:

:2,10norm 10i 

Lembre-se que tem de haver espaço em branco no final do comando - este será o personagem que queremos ter inserido. Podemos linha também travessão com qualquer outro texto, por exemplo para recuar cada linha no arquivo com 5 caracteres de sublinhado:

:%norm 5i_

Ou algo ainda mais extravagante:

:%norm 2i[ ]

exemplo mais prático está comentando Bash / Python / etc código com # caracteres:

:1,20norm i#

Para re-indent uso x em vez de i . Por exemplo, para remover primeiros 5 caracteres de cada linha:

:%norm 5x

Para mim, a solução MacVim (Visual) foi, selecione com o mouse e pressione ">", mas depois de colocar as seguintes linhas em "~ / .vimrc" desde que eu como espaços em vez de separadores:

set expandtab
set tabstop=2
set shiftwidth=2

Também é útil para ser capaz de chamar MacVim a partir da linha de comando (Terminal.app), por isso desde que eu tenho o seguinte diretório helper "~ / bin", onde eu colocar 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

Macports messes com "~ / .profile" muito, então a variável de ambiente PATH pode obter bastante longo.

Eu não encontrar um método que eu uso nos comentários, então eu vou compartilhá-lo (eu acho que vim apenas):

  1. Esc para entrar no modo de comando
  2. Mover para o primeiro caractere da última linha que deseja ident
  3. Ctrl - v para iniciar bloco selecione
  4. Mover para o primeiro caractere da primeira linha que deseja ident
  5. mudança - i para entrar no modo de inserção especial
  6. Tipo de tantos spases / abas como você precisa travessão (2, por exemplo
  7. pressione Esc e espaços aparecerá em todas as linhas

Isto é útil quando você não quer configurações ident / guia Alterar no vimrc ou para recordá-los para mudá-lo durante a edição.

Para Unindent I utilizar o mesmo Ctrl -. v bloco selecionar para selecionar espaços e excluí-lo com d

Eu não sei porque é tão difícil encontrar uma resposta simples como este ...

Eu mesmo tive que lutar muito para conhecer esta sua é muito simples

editar o arquivo .vimrc no diretório inicial adicione esta linha

set cindent

em você arquivo onde você quer travessão corretamente

no tipo de modo de comando / Normal

10==   (this will indent 10 lines from the current cursor location )
gg=G   (complete file will be properly indented)

5== vai recuar 5 linhas de posição atual do cursor. assim você pode digitar qualquer número antes ==, ele vai recuar número de linhas. Isto está em modo de comando.

gg=G vai recuar arquivo inteiro de cima para baixo.

:help left

Em ex mode você pode usar :left ou :le a linhas de alinhar uma quantidade especificada. Especificamente, :left irá linhas alinhar à esquerda do [gama]. Ele define o travessão nas linhas para [travessão] (padrão 0).

:%le3 ou :%le 3 ou :%left3 ou :%left 3 irá alinhar o arquivo inteiro por preenchimento com três espaços.

:5,7 le 3 vai alinhar linhas de 5 a 7 por preenchimento deles com 3 espaços.

:le sem qualquer valor ou :le 0 vai alinhar à esquerda com um preenchimento de 0.

Isso funciona em vim e gvim.

:line_num_start,line_num_end>

por exemplo.

14,21> shifts line number 14 to 21 to one tab

Aumentar o símbolo '>' para mais guias

por exemplo.

14,21>>> for 3 tabs

Usando Python muito, eu me encontro precisando necessidade frequente de mudar blocos por mais de um travessão. Você pode fazer isso usando qualquer um dos métodos de seleção de bloco, e, em seguida, basta digitar o número de travessões você deseja saltar para a direita antes do >

Por exemplo. V5j3> vai recuar 5 linhas 3 vezes - que é de 12 espaços, se você usar 4 espaços para travessões

Para recuar cada linha em um tipo de arquivo, esc , em seguida, G = gg

Como travessão destacou código vi imediatamente por um # de espaços:

Opção 1: Recuo um bloco de código em vi a três espaços com o modo Visual Block:

  1. Selecione o bloco de código que você deseja travessão. Faça isso usando Ctrl + V em modo normal e arrowing para baixo para selecionar texto. Enquanto ele for selecionado, entre : para dar um comando para o bloco de texto selecionado.

  2. A seguir irá aparecer na linha de comando: :'<,'>

  3. Para definir travessão 3 espaços, tipo le 3 e pressione enter. Isto é o que parece: :'<,'>le 3

  4. O texto selecionado é imediatamente recuado para 3 espaços.

Opção 2: Recuo um bloco de código em vi a três espaços com modo Linha Visual:

  1. Abra o arquivo no VI.
  2. Coloque o cursor sobre algum código
  3. Seja na imprensa modo normal as seguintes teclas:

    Vjjjj:le 3
    

    Interpretação do que você fez:

    meios V começar selecionando o texto.

    jjjj setas para baixo 4 linhas, destacando 4 linhas.

    : diz vi você entrará em uma instrução para o texto realçado.

    meios le 3 travessão texto destacado 3 linhas.

    O código selecionado é imediatamente aumentada ou diminuída para três espaços recuo.

Opção 3: use Visual modo de bloco e do modo de inserção especial para aumentar travessão:

  1. Abra o arquivo no VI.
  2. Coloque o cursor sobre algum código
  3. Seja na imprensa modo normal as seguintes teclas:

    Ctrl + V

    jjjj
    

    (pressione a barra de espaço 5 vezes)

    Esc Shift + i

    Todo o texto destacado é recuado um adicional de 5 espaços.

Para recuar todo o arquivo de 4:

esc 4G=G

Eu uso selecção visual-modo de bloco:

  • Vá para a frente do bloco de movimento (na parte superior ou inferior).
  • Pressione Ctrl-V para entrar no modo de bloco visual.
  • Vá para seleccionar uma coluna na frente das linhas.
  • Prima I (shift i) para entrar modo de inserção.
  • Digite alguns espaços.
  • Pressione ESC. Todas as linhas vai mudar.

Esta não é uma uni-tasker. Ele funciona:

  • No meio de linhas.
  • Para inserir qualquer string em todas as linhas.
  • Para alterar uma coluna (use c em vez de I).
  • puxão, de exclusão, substituto, etc ...
  • Para o bloco de código {}: = + %

  • Para a linha selecionada:. Mudança + v selecionar usando up / down arrow prima depois a tecla =

  • Por todo o arquivo: gg + = + G

Nota: 'gg' significa ir para a linha 1, '=' é o comando travessão, e move-se 'G' o cursor para o final do arquivo

.

| Suponha que representa a posição do cursor no Vim. Se o texto a ser recuado está dentro de um bloco de código como:

int main() {
line1
line2|
line3
}

você pode fazer >i{ que significa " travessão (>) dentro (i) bloco ({) " e obter:

int main() {
    line1
    line2|
    line3
}

Agora, suponha que as linhas são contíguos, mas fora de um bloco, como:

do
line2|
line3
line4
done

Para linhas de recuo 2-4 você pode selecionar visualmente as linhas e tipo >. Ou ainda mais rápido que você pode fazer >2j para obter:

do
    line2|
    line3
    line4
done

Note que isso significa >Nj recuar da linha atual para linhas N abaixo. Se o número de linhas a ser recuado é grande, pode demorar alguns segundos para que o usuário contar o valor adequado de N. Para salvar valiosos segundos, você pode ativar a opção de número relativo com set relativenumber (disponível desde Vim versão 7.3).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top