Подсчитать выделенную длину строки в VIM


24

Интересно, есть ли способ подсчитать подсвеченные символы в vim(включая пробелы)?

ОБНОВИТЬ

VIM визуальный режим

Он показывает количество строк, если мой выбор на нескольких строках. Мне нужно количество символов.

Ответы:


28

Если я что-то упустил, Вим уже делает это. Если я выделю какой-нибудь текст с помощью мыши или набрав vи переместив курсор, я увижу внизу экрана

- VISUAL - 12

где число справа - это количество выделенных символов. Это работает только в том случае, если выделение находится в одной строке, в противном случае отображается количество строк.

Вы также можете визуально выбрать некоторую область текста и тип, g Ctrl-Gкоторый покажет количество выбранных строк, слов и байтов.


4
(ошеломлен) Как, черт возьми, я использовал Vim так долго и никогда не замечал этого ? Но в свою защиту я думал о получении номера программно.
Njd

Хороший ответ, но взгляните на обновленный вопрос. Как и @njd, я этого не заметил.
Немоден

1
@Nemoden: попробуйте вторую часть предложения Гариджона (g Ctrl-G). Должна отображаться строка типа «Выбрано # из # строк; # из # слов; # из # байтов».
сентября

Ой. Виноват. Я не знаю, почему я пропустил второе решение. Оно работает. Спасибо!
Немоден

12
Это не включено по умолчанию в некоторых системах. Просто добавьте set showcmdв свой, vimrcчтобы включить его.
Тайлер Холиен

8

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делает работу хорошо.
Joeytwiddle

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

:map ,q "xy:call VisualLength()<CR>
  1. Сначала вы дергаете текущий выбор (в буфер x)

  2. Затем вы отображаете длину этого буфера: strlen(@x)
    ( - VISUAL - отображаемое в строке состояния скрывает это, поэтому мы должны добавить новую строку)

  3. Выделите предыдущий визуальный диапазон: gv

Это не учитывает, был ли визуальный режим линейным, символьным или блочным, но этого достаточно для большинства случаев.


2

По вашему скриншоту я вижу, что вы работаете в Windows, поэтому этот ответ может вам не сильно помочь. Но для других ...

Недостаточно используемая (IMO) особенность Vim - позволить внешним командам выполнять тяжелую работу.

В этом случае, если вы находитесь в UNIX-подобной системе, вы можете использовать wcкоманду для этого.

Самый простой способ - заменить выделенный текст выводом команды, набрав (с выделенным текстом):

:!wc

(затем нажмите ввод).

Это будет показано в вашей командной строке как:

'<,'>!wc

После прочтения информации вы можете отменить, uчтобы вернуться к тому, с чего начали.

Примечание. Эта обработка выполняется только для целых строк . Если вам нужны частичные строки, я думаю, @ garyjohn's g_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 или аналогичный, чтобы получить эти преимущества.


1

Для программного способа в vimscript это работало для меня, когда выбор ограничен одной строкой:

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

(Использование virtcol(..)вместо так col(..), чтобы оно работало, как ожидалось, когда :set ve=allактивно.)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.