Adicionar números de linha ao código-fonte no vim
-
05-07-2019 - |
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
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 oset printoptions=number:y
linha novimrc
".
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 :)