Conta la lunghezza della stringa evidenziata in VIM


24

Mi chiedo c'è un modo per contare i simboli evidenziati vim(inclusi gli spazi bianchi)?

AGGIORNARE

Modalità visiva VIM

Mostra il conteggio delle righe se la mia selezione è su più righe. Ho bisogno del conteggio dei simboli.

Risposte:


28

A meno che non mi manchi qualcosa, Vim lo fa già. Se metto in evidenza del testo usando il mouse o digitando ve muovendo il cursore, vedo nella parte inferiore dello schermo

- VISUAL - 12

dove il numero a destra è il numero di caratteri evidenziati. Funziona solo se la selezione è su una singola riga, altrimenti mostra il conteggio delle righe.

Puoi anche selezionare visivamente alcune aree di testo e tipo g Ctrl-Gche mostreranno il numero di righe, parole e byte selezionati.


4
(stordito) Come diavolo ho fatto uso Vim per tanto tempo e mai notato che ? Ma a mia difesa, stavo pensando di ottenere il numero a livello di codice.
njd

Buona risposta, ma dai un'occhiata alla domanda aggiornata. Oltre a @njd non me ne sono accorto.
Nemoden,

1
@Nemoden: prova la seconda parte del suggerimento di garyjohn (g Ctrl-G). Dovrebbe mostrare una riga come "N. selezionato di # linee; N. di # parole; N. di # byte."
peth

Oh. Colpa mia. Non so perché ho saltato la seconda soluzione. Funziona. Grazie!
Nemoden,

12
Questo non è abilitato di default su alcuni sistemi. Aggiungi set showcmdal tuo vimrcper abilitarlo.
Tyler Holien,

8

Vim passa dalla visualizzazione del conteggio dei caratteri al conteggio delle righe per il testo visualizzato a seconda di cosa e come visualizzi (vim 7.4 patchato a settembre 2015)

V will display line count
v$ will display character count

Se visualizzi più di una riga, viene visualizzato solo il conteggio delle righe

g-CTRL-G displays 'byte count' which seems to be 'char count' +1 per line

Come dice la domanda, anche il normale vpassa dal conteggio dei caratteri al conteggio delle righe se la selezione si estende su più righe. Comunque g CTRL-Gfa bene il lavoro.
Joeytwiddle,

2
:function VisualLength()
:  exe 'normal "xy'
:  echo "Visual: " . strlen(@x) . "\n"
:  exe 'normal gv'
:endfunction

:map ,q "xy:call VisualLength()<CR>
  1. Per prima cosa, estrai la selezione corrente (nel buffer x)

  2. Quindi visualizzi la lunghezza di quel buffer: strlen(@x)
    (Il - VISUAL - visualizzato nella riga di stato lo oscura, quindi dobbiamo aggiungere una nuova riga)

  3. Evidenzia l'intervallo visivo precedente: gv

Ciò non tiene conto del fatto che la modalità visiva fosse in modalità linea, carattere o blocco, ma è sufficiente per la maggior parte dei casi.


2

Dal tuo screenshot vedo che stai eseguendo Windows, quindi questa risposta potrebbe non aiutarti tanto. Ma per gli altri ...

Una caratteristica poco utilizzata (IMO) di Vim è quella di consentire ai comandi esterni di eseguire il sollevamento di carichi pesanti.

In questo caso, se si utilizza un sistema simile a UNIX, è possibile utilizzare il wccomando per farlo.

Il modo più semplice è sostituire il testo selezionato con l'output del comando, digitando (con testo selezionato):

:!wc

(quindi premere invio).

Questo apparirà nella tua riga di comando come:

'<,'>!wc

Dopo aver letto le informazioni, puoi annullare l'operazione uper tornare al punto di partenza.

Nota: questa elaborazione viene eseguita solo su intere righe . Se vuoi linee parziali, penso che @ garyjohn g_CTRL-Gsia la soluzione migliore.

Puoi evitare la necessità di annullare eseguendo invece:

:w !wc

Questo "scrive" le righe selezionate nell'input standard del comando e l'output del comando verrà visualizzato in un nuovo buffer temporaneo, lasciando intatto l'originale. Vedi :help :write_cper maggiori informazioni.

Nota: ho ricevuto le :write_cinformazioni da: /programming/1237780/vim-execute-shell-command-without-filtering

Ora, più in generale:

Questo esempio con wcè piuttosto semplicistico, ma puoi immaginare come questo sia un approccio potente. UNIX ha già molti comandi di elaborazione del testo disponibili e puoi usarli all'interno di Vim abbastanza facilmente, senza dover toccare Vimscript (yech).

Inoltre, qualsiasi programma a riga di comando che scrivi che si occupa di stdin / stdout ora può non solo avvantaggiarti sul tuo terminale, ma anche all'interno di Vim.

Mi trovo, ad esempio, in esecuzione tidye json-formatdall'interno di VIM per rendere i file che sto guardando più leggibili.

Puoi fare lo stesso su Windows, ma Windows non ha un set così ricco di comandi integrati. Tuttavia, puoi sempre installare GNUWin32 o simili per ottenere questi vantaggi.


1

Per un modo programmatico all'interno di vimscript, questo ha funzionato per me quando la selezione è limitata a una riga:

let amount = virtcol("'>") - virtcol("'<")

(Usando virtcol(..)invece di col(..), in modo tale che funzioni come previsto quando :set ve=allè attivo.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.