Как получить (g)Vim для отображения количества символов текущего файла?

мне нравится писать учебники и статьи для форума по программированию, который я часто посещаю. Этот форум имеет ограничение на количество символов в посте. В прошлом я использовал Notepad++ для написания сообщений, и он сохраняет количество живых символов в строке состояния. Я начинаю использовать gVim больше, и на данный момент я действительно не хочу возвращаться к Notepad++, но очень полезно иметь этот счетчик символов. Если я перейду к подсчету, я обычно вставляю сообщение в Notepad++, чтобы я мог видеть, когда я обрезал достаточно, чтобы получить на пределе.

Я видел предложения, которые :set ruler помогло бы, но это дает только количество символов через текущий индекс столбца в текущей строке. Было бы здорово, если бы я не использовал разрывы абзацев, но я уверен, что вы согласитесь, что чтение нескольких тысяч символов в одном абзаце неудобно.

Я прочитал справку и подумал, что rulerformat будет работать, но после просмотра statusline формат он использует я не видел ничего, что дает символ счетчик для текущего буфера.

Я видел, что есть плагины, которые добавляют это, но я все еще погружая пальцы в gVim, и я не уверен, что я хочу, чтобы загрузить случайные Плагины, прежде чем я понимаю, что они делают. Я бы предпочел использовать что-то встроенное в vim, но если его нет, его не существует.

что я должен сделать, чтобы достичь своей цели? Если он включает плагин, используете ли вы его и насколько хорошо он работает?

76
задан OwenP 2010-06-07 20:26:01
источник

9 ответов

пресс g CTRL-G в обычном режиме для отображения статистики на курсор и файл.

если вы находитесь в Linux вы можете использовать wc -m получить количество символов в текущем файле

:!wc -m %

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

map <F4> :!wc -m %<CR>
130
отвечен mrucci 2011-08-27 22:19:08
источник
:help count-items

говорит о том, что вы могли бы либо сделать пробный прогон замены Ала

:%s/./&/gn

(который затем сообщает количество совпадающих символов) или что вы делаете фантазии strlen() на визуально выделенный текст:

:echo strlen(@")

("безымянный регистр)

так как вы можете вызвать выражение в строке состояния, как %{myfunc()} что может быть хорошей отправной точкой. подсчет все время может быть немного времени, так как вам придется выбрать весь текст и затем дергать его, но, возможно, показывая количество байтов в " - регистр хорошо для вас уже. если вы действительно хотите узнать количество символов в буфере: просто визуально выделите весь текст в буфере и дерните его. таким образом, решение будет:

 :set statusline=%{strlen(@")}

, который дает вам количество символов в " - регистр (который идентичен количеству байт, если вы выбираете и дергать текущий буфер).

23
отвечен akira 2010-06-07 20:58:14
источник
:help statusline

дает

o N   Byte number in file of byte under cursor, first byte is 1.
      Mnemonic: Offset from start of file (with one added)

это тоже хорошее решение для вашей проблемы. просто перейдите в конец буфера с G и номер байта показанный в вашей строке состояния число символов (не истинных с многобайтовыми символами конечно). вернитесь туда, откуда вы пришли с ctrlo.

6
отвечен akira 2010-06-08 09:03:02
источник

повышение к ответу mrucci:

можно использовать wc в linux без необходимости сохранения файла, направляя :w вывод команды выглядит следующим образом:

:w !wc -m

и вы можете сопоставить его с чем-то, как упоминалось mrucci.

6
отвечен architectonic 2014-07-15 12:48:04
источник

Если вы привыкли использовать :w для сохранения файла, каждый раз, когда вы это делаете, статус сообщает количество символов, написанных. Например, в конце этого предложения я сделал a: w (да, я использую gvim для написания этой заметки), и он сообщил: 245c написано.

3
отвечен Erin Thomas 2012-05-31 15:03:14
источник

можно добавить выражения для отображения bytecount буфера в statusline с:

:set statusline+=\ %{\ line2byte(line(\"$\")+1)-1\ }B

или вы можете изменить переменную option напрямую, чтобы избежать экранирования:

:let &statusline .= ' %{ line2byte(line("$")+1)-1 }B'
3
отвечен akira 2014-06-11 13:57:53
источник

обходной путь, который я использовал, пока не принял ответ mrucci:

Я случайно обнаружил, что при i: w для сохранения файла команда выводит количество записанных байт. Это более или менее количество символов, так что это было достаточно близко, так далеко. Мне нравится ответить mrucci, а также, возможно, более чем один, потому что это тоже подсчет слов.

0
отвечен OwenP 2010-10-22 19:47:02
источник

если вы храните файловую копию текста, просто запишите текст на диск-количество символов отображается по умолчанию.

если вы не хотите хранить файл, просто сохраните текст в /dev/null::w!/dev/null.

вы можете wc подсчет символов: :%!wc -c - но не забудьте нажать U восстановить текст.

Если вам это часто нужно, просто сопоставьте эти команды с последовательностью клавиш::map #wc :w!/dev/null^[ - обратите внимание, что ^[ вводится как Ctrl+V Esc.

как первый индикатор размера текста, просто включите номера строк; признался: Для этого нужна ментальная арифметика ; -)

0
отвечен kdo 2012-05-31 15:18:39
источник

после этого вопроса и прочтения ответов (спасибо mrucci )я добавил Эти строки к моим.файл инициализации vimrc.

# get full statistics on the current buffer (not perfect, may redraw screen)
map ;gg           G$g<C-G>''
# get full statistics on the current position in the buffer
map ;gh           g<C-G>

Я оставляю это vim: помогите пользователям понять, что они делают.

лично я считаю полезным начать сопоставления Vim с ; или, Поскольку я редко использую их в качестве первого символа команды.

0
отвечен David E. 2012-11-11 21:06:50
источник

Другие вопросы vim gvim

X