Por exemplo, se eu tiver quatro linhas da seguinte maneira:
a primeira linha
a segunda linha
a terceira linha
a quarta linha
Eu quero revertê-los para
a quarta linha
a terceira linha
a segunda linha
a primeira linha
Como eu pude fazer isso no Vim?
vim
editing
text-editors
text-editing
Jichao
fonte
fonte
:command! -bar -range=% Reverse <line1>,<line2>global/^/m<line1>-1
vi.stackexchange.com/a/2107/10254Respostas:
Para reverter todas as linhas em um arquivo,
Para uma explicação, consulte
que também mostra como reverter apenas um intervalo de linhas.
fonte
ma
), 2. mova o cursor para a primeira linha do bloco, 3. digite:'a,.g/^/m 'a
Selecione as linhas desejadas, pressione
!
e, no prompt resultante, passe as linhas portac
la:'<,'>!tac
. Vejaman tac
para mais detalhes.fonte
shift+v
para entrar no modo de linha visual e, em seguida,j
adicionar linhas à seleção.gvim
também! Caso contrário, você precisará usar números de linha absolutos (talvez você possa usar parente, mas você deve ter cuidado) com o:g/^/m0
(que também é realmente difícil de lembrar) ... Então, essencialmente, o tac deve estar com o vim, independentemente da plataforma você está, mas não é 100% vimscript, mas quem se importa: P:.,'a!tac
trabalha com o mínimo esforço.shift+v
, você pode usar}
para alcançar o próximo parágrafo ou esvaziar o espaço vertical. Além dissoman tac: concatenate and print files in reverse
,.No Mac OS X,
tac
não existe, mas você pode usartail -r
o mesmo efeito:Isso também funciona muito bem no modo visual:
Trecho da página
tail(1)
de manual de:fonte
alias tac='tail -r'
brew install coreutils
e usargtac
.Para quem se sente mais confortável com o modo Visual:
1. Identifique o número da linha acima da seleção que você deseja inverter
:set nu
.2.
Shift-V
para realçar a seleção que você deseja inverter (modo visual).3
:g/^/m <Line number from step 1>
.Observe que, no modo visual, ele aparecerá automaticamente como
:'<,'>g/^/m <Line number>
quando você digita o comando de 3.Esse comando funciona movendo a seleção uma linha de cada vez para o número da linha que você especificar. Quando o segundo item é empurrado para o número da linha fornecido, ele empurra o primeiro para o número da linha + 1. Em seguida, o terceiro empurra o primeiro e o segundo para baixo, e assim sucessivamente, até que toda a lista seja empurrada para o número de linha única, resultando em um lista ordenada reversa.
fonte
'<
vez de digitar o número da linha manualmente. Basta iniciar a seleção uma linha anteriormente e executar:'<,'>g/^/m'<
.Um comando
:Rev[erse]
e mapeamentos opcionais para vocêvimrc
, para que você não precise se lembrar e executar as etapas não óbvias desta receita:(
:xmap
mapeia para o modo Visual, mas não para o Modo de seleção, conforme:help mapmode-x
aconselha o mapeamento de caracteres imprimíveis.)(Com base em: http://tech.groups.yahoo.com/group/vim/message/34305 )
fonte
:'<,'>g/^/m'<
:):-1,+1Rev
que você está procurando? Saiba que você pode selecionar visualmente o intervalo que deseja reverter, por exemplo:V7j:Rev
. Se isso não responder à sua pergunta, eu não a entendi, então você precisará elaborá-la ou reformulá-la para mim.Digamos que você esteja na linha 3, portanto temos um intervalo de 3 a 6. Basta digitar.
fonte
:,6g/^/m2
; ou quando em última linha do intervalo::3,g/^/m2
; e:3,6g/^/m2
funciona de qualquer lugar no arquivo.