Como encontrar a linha com o número máximo de colunas/caracteres no Vim/gVim?

Como encontrar a linha com o número máximo de colunas/caracteres no Vim/gVim?

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+ge 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:

insira a descrição da imagem aqui

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 wccomando às vezes tem uma -Lopçã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 wcsaída com cut. Juntando tudo e colando um comando em outro, é:

grep -nP ".{$(wc -L test_file | cut -f 1 -d ' ')}" test_file

informação relacionada