Pergunta

Como posso adicionar números de linha a um intervalo de linhas no vim? Não como em ": conjunto nu." - isso apenas exibe números, mas não adicioná-los ao arquivo

Foi útil?

Solução

Com

:%s/^/\=line('.')/

EDIT: para resumir os comentários.

Este comando pode ser ajustado tanto quanto você quiser.


Vamos dizer que você quer adicionar números na frente das linhas de uma seleção visual (V + movimento), e você quer que a numeração para começar às 42.

:'<,'>s/^/\=(line('.')-line("'<")+42)/

Se você quiser adicionar uma corda entre o número eo texto antigo a partir da linha, concatenar apenas (com . em VimL) para o número-expressão:

:'<,'>s/^/\=(line('.')-line("'<")+42).' --> '/

Se você precisa disto para classificar como texto, você pode querer a zero pad os resultados, que podem ser feitas utilizando printf para 0001, 0002 ... em vez de 1, 2 ... por exemplo:

:%s/^/\=printf('%04d', line('.'))/

De qualquer forma, se você quiser obter mais informações, basta abrir vim ajuda: :h :s e siga os links (|subreplace-special|, ..., |submatch()|)

Outras dicas

cat -n adiciona números de linha à sua entrada. Você pode canalizar o arquivo atual para cat -n e substituir o buffer atual com o que ele imprime na saída padrão. Felizmente esta solução complicada é menos de 10 caracteres no vim:

 :%!cat -n

Ou, se você quer apenas um subselection, selecione visualmente a área, e digite o seguinte:

 :!cat -n

Isso vai colocar automaticamente os marcadores de seleção visuais, e ficará assim depois que você digitou:

 :'<,'>!cat -n

Para apagar os números de linha, eu recomendo usar control-v, o que irá permitir que você selecione visualmente um retângulo, então você pode excluir esse retângulo com x.

Em um sistema GNU: com o binário nl externo:

:%!nl

Com Unix-like ambiente, você pode usar gato ou awk para gerar um número de linha facilmente, porque vim tem uma interface amigável com o escudo, então tudo trabalho no vim, assim como ele faz em shell.
De Vim Tip28 :

:%!cat -n

ou

:%!awk '{print NR,$0}'

Mas, se você usar o vim em MS-DOS, de win9x, win2000, você Resultados Estas toolkit. aqui está uma maneira muito simples de arquivar este apenas por vim:

fu! LineIt()
  exe ":s/^/".line(".")."/"
endf

Ou, uma sequência composta com alfabeto é tão fácil como acima:

exe "s/^/".nr2char(line("."))."/" 

Você também pode usar um subst:

:g/^/exe ":s/^/".line(".")."^I/"

Você pode também só quer imprimir as linhas sem adicioná-los ao arquivo:

"Às vezes pode ser útil, especialmente se a edição de grandes arquivos de origem para imprimir os números de linha no papel.
Para fazer isso você pode usar o :set printoptions=number:y opção para ativar e :set printoptions=number:n para desativar esse recurso.
Se o número da linha deve ser impresso sempre, coloque o set printoptions=number:y linha no vimrc ".

Em primeiro lugar, você pode remover os números das linhas existentes, se você precisar:

:%s/^[0-9]*//

Em seguida, você pode adicionar números de linha. NR refere-se ao número da linha atual a partir de um, para que você possa fazer alguma matemática sobre ele para obter a numeração que você deseja. O comando a seguir dá-lhe quatro números de linha dígitos:

:%!awk '{print 1000+NR*10,$0}'

O "VisIncr" plugin é bom para a inserção de colunas de incrementando os números em geral (ou letras, datas, números romanos, etc.). Você pode controlar o formato de número, preenchimento, e assim por diante. Assim, introduzir um "1" na frente de cada linha (através :s ou :g ou plaqueta do bloco visual), que destaque coluna em modo de bloco visual, e executar um dos comandos a partir do plug-in.

Se alguém quiser colocar uma guia (ou alguns espaços) depois de inserir os números de linha usando o este excelente resposta , aqui está uma maneira. Depois de ir para o modo de fuga, fazer:

:%s/^/\=line('.').'    '/

meios ^ início de uma linha e %s é a directiva para substituição. Assim, dizemos que colocar um número de linha no início de cada linha e adicione 4 espaços para ele e, em seguida, colocar o que foi o conteúdo da linha antes da substituição, e fazer isso para todas as linhas no arquivo.

Isto irá substituí-lo automaticamente. Alternativamente, se você deseja que o comando solicite confirmação de você, então faça:

:%s/^/\=line('.').'    '/igc

P.S: poder de vim :)

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