Відповіді:
Якщо я щось не пропускаю, Вім це вже робить. Якщо я виділяю якийсь текст за допомогою миші або вводячи v
та переміщуючи курсор, я бачу внизу екрана
- ВІЗУАЛЬНІ - 12
де число праворуч - кількість виділених символів. Це працює лише в тому випадку, якщо виділення знаходиться в одному рядку, інакше він відображає кількість рядків.
Ви також можете візуально вибрати область тексту та тип тексту, g Ctrl-Gякий відображатиме кількість вибраних рядків, слів та байтів.
set showcmd
до свого, vimrc
щоб увімкнути це.
Vim перемикає між відображенням кількості символів та кількістю рядків для візуалізованого тексту залежно від того, що та як візуалізувати (vim 7.4, виправлений до вересня 2015 року)
V will display line count
v$ will display character count
Якщо ви візуалізуєте більше одного рядка, він відображає лише кількість рядків
g-CTRL-G displays 'byte count' which seems to be 'char count' +1 per line
v
перемикаються з числа символів на кількість ліній, якщо виділення охоплює кілька рядків. Однак g CTRL-G
робота це прекрасно.
:function VisualLength()
: exe 'normal "xy'
: echo "Visual: " . strlen(@x) . "\n"
: exe 'normal gv'
:endfunction
:map ,q "xy:call VisualLength()<CR>
Спочатку вибираєте поточний вибір (у буфер x)
Потім ви відображаєте довжину цього буфера: strlen(@x)
(Відображення - VISUAL - у рядку статусу це приховує, тому ми повинні додати новий рядок)
Виділіть попередній візуальний діапазон: gv
Це не враховує, чи був візуальний режим лінійним, символьним чи блоковим, але цього достатньо для більшості випадків.
З вашого скріншоту я бачу, що ви працюєте в Windows, тому ця відповідь може вам не дуже допомогти. Але для інших ...
Недостатньо використана (IMO) функція Vim - це дозволяти зовнішнім командам робити важкий підйом.
У цьому випадку, якщо ви користуєтесь системою, схожою на UNIX, ви можете використовувати wc
команду для цього.
Найпростіший спосіб - замінити вибраний текст на вихід команди, ввівши (з обраним текстом):
:!wc
(потім натисніть клавішу Enter).
Це буде показано у вашому командному рядку як:
'<,'>!wc
Прочитавши інформацію, ви можете скасувати її u
щоб повернутися туди, де ви почали.
Примітка. Ця обробка проводиться лише цілими рядками . Якщо ви хочете часткових ліній, я думаю, що @ garyjohn'sg_CTRL-G
- найкраща ставка.
Ви можете уникнути необхідності скасувати, замість цього запустивши:
:w !wc
Це "записує" вибрані рядки на стандартний вхід команди, а вихід команди відображатиметься у новому тимчасовому буфері, залишаючи початковий недоторканим. Див. Для :help :write_c
отримання додаткової інформації.
Примітка: я отримав :write_c
інформацію від: /programming/1237780/vim-execute-shell-command-without-filtering
Тепер, більш загально:
Цей приклад с wc
досить спрощеним, але ви можете уявити, як це потужний підхід. У UNIX вже є багато команд для обробки тексту, і ви можете використовувати їх всередині Vim досить легко, не торкаючись Vimscript (yech).
Крім того, будь-яка програма командного рядка, яку ви пишете, що стосується stdin / stdout, тепер може не тільки принести користь вашому терміналу, але і всередині Vim.
Я вважаю, що, наприклад, працює tidy
і json-format
з vim зсередини, щоб зробити файли, на які я дивлюся, більш читаними.
Можна зробити те ж саме в Windows, але Windows не має настільки багатого вбудованого набору команд. Ви завжди можете встановити GNUWin32 або подібне, щоб отримати ці переваги.
Для програмного способу в vimscript це працювало для мене, коли вибір обмежений одним рядком:
let amount = virtcol("'>") - virtcol("'<")
(Використовуючи virtcol(..)
замість того col(..)
, щоб він працював так, як очікувалося, коли :set ve=all
активний.)