Risposte:
A meno che non mi manchi qualcosa, Vim lo fa già. Se metto in evidenza del testo usando il mouse o digitando v
e 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.
set showcmd
al tuo vimrc
per abilitarlo.
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
v
passa dal conteggio dei caratteri al conteggio delle righe se la selezione si estende su più righe. Comunque g CTRL-G
fa bene il lavoro.
:function VisualLength()
: exe 'normal "xy'
: echo "Visual: " . strlen(@x) . "\n"
: exe 'normal gv'
:endfunction
:map ,q "xy:call VisualLength()<CR>
Per prima cosa, estrai la selezione corrente (nel buffer x)
Quindi visualizzi la lunghezza di quel buffer: strlen(@x)
(Il - VISUAL - visualizzato nella riga di stato lo oscura, quindi dobbiamo aggiungere una nuova riga)
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.
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 wc
comando 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 u
per tornare al punto di partenza.
Nota: questa elaborazione viene eseguita solo su intere righe . Se vuoi linee parziali, penso che @ garyjohn g_CTRL-G
sia 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_c
per maggiori informazioni.
Nota: ho ricevuto le :write_c
informazioni 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 tidy
e json-format
dall'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.
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.)