VIM: como ir para a linha exata no Ubuntu

87

Estou usando vino Ubuntu 12.10. Alguns arquivos são muito longos, então quando eu quero ir para o meio do arquivo, tenho que descer a página ou rolar para baixo.

Existe um atalho VIM para ir para um número de linha exato?

kevin
fonte
especialistas da @vim. Isso é realmente específico de Ubuntu- / bash- / Linux (de acordo com as tags OP)? Não estou usando muito o vim, mas para meu uso não notei a menor diferença entre o Ubuntu / CentOS / Suse / Windows.
Alexander Malakhov

Respostas:

143
:150

irá levá-lo para a linha 150 em vi

:1500

irá levá-lo para a linha 1500 em vi

De acordo com os comentários que você pode tentar

150G

para chegar à linha 150. que tem menos toques de tecla do que :150Enter se você não tiver certeza de qual linha está tentando

 :set nu!

observe o:

se você quiser ver sempre a linha, considere editar seu perfil do vim. Mais frequente

vi ~/.vimrc

e adicione

:set nu! 

e escrever e sair

:wq
#or you could use :x

isso pode ser feito fora do vi. Por exemplo, se eu quiser excluir a linha 5000 em um arquivo de texto, posso usar uma linguagem de script. Por exemplo, usando sed seria o seguinte

sed -i '5000d;' inputFile.txt

para excluir a linha 10 a 20, seria

sed -i '10,20d;' inputFile.txt

observe que o -i editará o arquivo no local. Sem o -i, ele irá para o stdout. Tente. você pode redirecionar o stdout para um arquivo

sed '5001,$d;' inputFile.txt >> appenedFile.txt

isso pode ter muita coisa acontecendo aqui para você. isso exclui a linha 5001 para $. Com $ sendo o fim do arquivo. >> será anexado a um arquivo. onde as> cria um novo arquivo.

se você está curioso para quantas linhas existem em um arquivo você pode querer digitar wc -l inputFile.txt

parte disso pode parecer terrivelmente trivial, mas se você está tentando editar um arquivo com 50.000 linhas, pode levar um bom minuto para abrir e percorrer. onde se você sabe que quer apenas deletar a última linha, você pode usar o sed e fazer isso em uma fração do tempo.

O sed também pode pesquisar e substituir dentro de um arquivo. Mas talvez awk, perl ou python também possam ser uma solução viável.

mas no geral, você pode querer encontrar um bom tutorial sobre o vi. milhares existem. Eu consultaria o google. Talvez encontre um VIM Cheatsheat.

maçarico
fonte
Não tem problema, ampliei um pouco a minha resposta, mas. Boa sorte
mato
2
também, no vim você pode digitar: n50% e ir para o meio do arquivo.
Eric Fortis
1
No modo normal, 150Gfaz o mesmo que :150. Não é mais rápido, mas pode ser mais fácil de lembrar.
romainl
@romainl 150gg faz o mesmo. Ambos são realmente mais rápidos do que: 150 <cr>
Randy Morris
@Randy Morris - Sim, é mais rápido, esqueci de levar <CR>em consideração.
romainl
14

Outras dicas do vim: no modo de comando

  • H vai para o topo da tela
  • M vai para o meio da tela
  • L vai para a parte inferior da tela
  • gg vai para a primeira linha
  • G vai para a última linha
glenn jackman
fonte
7

reserve alguns minutos e comece a ler este documento. Ele recompensa você a longo prazo pela eficiência na edição do arquivo de configuração, especialmente.

Jasonw
fonte
Link está morto
O que está em uma Pesquisa Google
6

Em um terminal aberto, em um shell bash, simplesmente edite seu arquivo executando:

$ vi +N yourfile

Onde Nestá o número da linha.

Para visualizar ( moreou less;):

$ less +N yourfile
$ more +N yourfile

O sinal +significa que o comando deve ser executado no início . Portanto, se o comando for apenas um número, então vi, lesse more, saltará para isso como um número de linha .

Mas você também pode usar /regexpara encontrar a primeira ocorrência de uma string ou regex específica:

$ less +/Error logfile
$ less -i +/error logfile      # -i Causes less's searches to ignore case
$ vi +/open.*myfile myprog...
F. Hauri
fonte
3

Outro conselho: como você é novo no vim, correr vimtutorpode ser muito útil.

rvs
fonte
6
Não deveria ser apenas um comentário, já que não aborda a questão específica?
Brian Rasmussen