Количество слов, напечатанное в документе Vim - PullRequest
0 голосов
/ 19 марта 2011

Я хотел бы добавить в мой файл .vimrc функцию, которая обновляет текст в открытом документе, особенно там, где он находит текст «Количество слов»: он будет использовать vim для вставки точного количества слов в текущий документ. .

В основном это упражнение по программированию, и для лучшего изучения vim я знаю, что для этой работы доступны внешние программы, такие как wc.

Вот пример аналогичной функции, которую я использую для подсчета строк кода:

function! CountNonEmpty()
    let l = 1
    let char_count = 0
    while l <= line("$")
        if len(substitute(getline(l), '\s', '', 'g')) > 3   
            let char_count += 1 
        endif
        let l += 1
    endwhile
    return char_count
endfunction

function! LastModified()
  if &modified
    let save_cursor = getpos(".")
    let n = min([15, line("$")])
    keepjumps exe '1,' . n . 's#^\(.\{,10}LOC:\).*#\1' .
          \ ' ' . CountNonEmpty() . '#e'
    call histdel('search', -1)
    call setpos('.', save_cursor)
  endif
endfun

autocmd BufWritePre * call LastModified()

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

1 Ответ

1 голос
/ 02 апреля 2011

После еще нескольких копаний я нашел ответ.Это код от Михаэля Данна, другого пользователя StackOverflow, размещенного на Функция быстрого подсчета слов в Vim

Я опубликую здесь, как я включил его здесь на случай, если кто-то еще найдет эту часть моего.vimrc быть полезным:

function! CountNonEmpty()
    let l = 1
    let char_count = 0
    while l <= line("$")
        if len(substitute(getline(l), '\s', '', 'g')) > 3   
            let char_count += 1 
        endif
        let l += 1
    endwhile
    return char_count
endfunction

function WordCount()
  let s:old_status = v:statusmsg
  exe "silent normal g\<c-g>"
  let s:word_count = str2nr(split(v:statusmsg)[11])
  let v:statusmsg = s:old_status
  return s:word_count
endfunction  

" If buffer modified, update any 'Last modified: ' in the first 20 lines.
" 'Last modified: ' can have up to 10 characters before (they are retained).
" Restores cursor and window position using save_cursor variable.
function! LastModified()
  if &modified
    let save_cursor = getpos(".")
    let n = min([15, line("$")])
    keepjumps exe '1,' . n . 's#^\(.\{,10}LOC:\).*#\1' .
          \ ' ' . CountNonEmpty() . '#e'
    keepjumps exe '1,' . n . 's#^\(.\{,10}Word Count:\).*#\1' .
          \ ' ' . WordCount() . '#e'
    call histdel('search', -1)
    call setpos('.', save_cursor)
  endif
endfun

autocmd BufWritePre * call LastModified()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...