Интересно, есть ли способ подсчета выделенных символов в vim
(включая пробелы)?
ОБНОВИТЬ
Он показывает количество строк, если мой выбор на нескольких строках. Мне нужно количество символов.
Интересно, есть ли способ подсчета выделенных символов в vim
(включая пробелы)?
ОБНОВИТЬ
Он показывает количество строк, если мой выбор на нескольких строках. Мне нужно количество символов.
Если я не пропустил что-то, Вим уже делает это. Если я выделю какой-нибудь текст с помощью мыши или, введя v
и переместив курсор, я увижу внизу экрана
-- VISUAL -- 12
где число справа - это количество выделенных символов. Это работает только в том случае, если выделение находится в одной строке, в противном случае отображается количество строк.
Вы также можете визуально выбрать некоторую область текста и набрать g Ctrl-G, которая покажет количество выбранных строк, слов и байтов.
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
По вашему скриншоту я вижу, что вы работаете в Windows, поэтому этот ответ может вам не сильно помочь. Но для других ...
Недостаточно используемая (IMO) особенность Vim - позволить внешним командам выполнять тяжелую работу.
В этом случае, если вы находитесь в UNIX-подобной системе, вы можете использовать команду wc
для этого.
Самый простой способ - заменить выделенный текст выводом команды, набрав (с выделенным текстом):
:!wc
(затем нажмите ввод).
Это будет показано в вашей командной строке как:
'<,'>!wc
После того, как вы прочитали информацию, вы можете отменить с u
чтобы вернуться к тому, с чего вы начали.
Примечание. Эта обработка выполняется только для целых строк . Если вам нужны частичные строки, я думаю, что @ garyjohn's g_CTRL-G
- ваш лучший выбор .
Вы можете избежать необходимости отмены, вместо этого запустив:
:w !wc
Это "записывает" выбранные строки в стандартный ввод команды, и вывод команды будет отображаться в новом временном буфере, оставляя исходный нетронутым. Смотрите :help :write_c
для получения дополнительной информации.
Примечание: я получил информацию :write_c
от: https://stackoverflow.com/questions/1237780/vim-execute-shell-command-without-filtering
Теперь в целом:
Этот пример с wc
довольно прост, но вы можете представить, насколько это мощный подход. В UNIX уже доступно много команд для обработки текста, и вы можете использовать их в Vim довольно легко, не трогая Vimscript (yech).
Кроме того, любая написанная вами программа командной строки, которая работает со stdin/stdout, теперь может принести пользу не только вашему терминалу, но и внутри Vim.
Например, я запускаю tidy
и json-format
изнутри vim, чтобы сделать файлы, на которые я смотрю, более читабельными.
Вы можете сделать то же самое в Windows, но в Windows нет такого богатого набора встроенных команд. Вы всегда можете установить GNUWin32 или аналогичную версию, чтобы получить эти преимущества.
: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
Это не учитывает, был ли визуальный режим линейным, символьным или блочным, но этого достаточно для большинства случаев.
Для программного способа в vimscript это работало для меня, когда выбор ограничен одной строкой:
let amount = virtcol("'>") - virtcol("'<")
(Используя virtcol(..)
вместо col(..)
, чтобы он работал как положено, когда :set ve=all
активен.)