
Atualmente estou usando o gVim no Windows XP e tenho dois acompanhamentos para minha pergunta principal:
Qual é o melhor método para encontrar a linha com mais caracteres?
Meu método atual:Eu uso a pesquisa regex :/^\(\p\)\{#number#,}$
) e continuo aumentando o número inteiro #number#
até conseguir apenas uma correspondência. No caso do meu arquivo, é uma linha de apenas 81 mil caracteres - e não 916.657 como eu pensava anteriormente. Eu sei disso porque quando o cursor está nessa linha eu pressiono g + Ctrl+g
e obtenho a contagem de colunas de 81K.
Acompanhamento 1)A pergunta é "What is the best method of finding the line with the most columns?"
igual à nº 2 acima?
Acompanhamento 2)O que significa o segundo número quando abro um arquivo e vejo a seguinte linha na parte inferior da tela:
Interpreto isso como significando que o arquivo tem 14.871 linhas e pelo menos uma linha tem 916.657 colunas. Verifiquei que o arquivo possui 14.871 linhas, mas não consegui entender a finalidade da segunda (916K).
Responder1
O segundo número é a contagem total de caracteres em todo o arquivo. Se você fizer:
$ wc -l -c filename
você deverá ver os mesmos dois números (linhas e total de caracteres). Na verdade, você pode fazer:
:!wc -l -c %
Aqui está um plugin chamadofiltro de texto(download) que inclui uma função para encontrar a linha mais longa.
Ou você pode usar isso para encontrar o comprimento da linha mais longa:
:echo max(map(range(1, line('$')), "col([v:val, '$'])")) - 1
então você pode usar esse número assim:
/^.\{248\}$
Responder2
Deve haver uma maneira melhor, mas o seguinte também serve:
%s/./a/g "Replace everything with 'a's
sort! "Sort by column length
ggy$ "Go to first line (longest) and copy it
u "Undo the sorting
/<c-r>" "Search for the longest line
mm "Mark it 'm'
u "Undo the replace
'm "Go to the mark - there!
Responder3
Não posso responder à primeira pergunta, mas o segundo número na mensagem de carregamento do arquivo é o número total de caracteres no arquivo.
Responder4
Não tão centrado no vim e semelhante a algumas outras respostas, mas talvez mais intuitivo para algumas pessoas. Isso pressupõe que você esteja bem em chamar alguns programas externos de dentro do vim.
Eu tenho o seguinte em arquivo test_file
:
hello world
helloooooooooooooo world !!!
yo, world!
helloooOoooOooooOo World ! !
O wc
comando às vezes tem uma -L
opção que imprime o tamanho da linha mais longa. 28 test_file
é a saída do meu exemplo.
Você pode imprimir essas linhas de 28 caracteres (e seus números de linha) com grep -nP ".{28}" test_file
.
2:helloooooooooooooo world !!!
4:helloooOoooOooooOo World ! !
Você pode analisar a wc
saída com cut
. Juntando tudo e colando um comando em outro, é:
grep -nP ".{$(wc -L test_file | cut -f 1 -d ' ')}" test_file