Проверьте, есть ли текущий активный визуальный выбор в Vim из функции, вызываемой командой

Ситуация №1: Я только что выделил блок текста. Затем я набираю ": Command", которая вызывает некоторую функцию .

Ситуация № 2: Текущий визуальный выбор отсутствует (хотя я, возможно, сделал такой выбор ранее в сеансе редактирования). Я набираю «: Команда», которая вызывает (ту же самую) функцию.

Есть ли (надежный) способ различить две вышеуказанные ситуации внутри функции? Я попробовал mode () , но проблема в том, что в обоих случаях я нахожусь в командном режиме, хотя в первом случае я попал в командный режим из визуального режима, а во втором - из обычного. Может быть, путем проверки a: firstline / a: lastline / v: count ?


Обновление - пример использования: «: Sum ». Если есть текущий визуальный выбор, например, столбец чисел (выделение блока) или диапазон строк, содержащий только числа, эта команда отобразит сумму чисел. В противном случае он ожидает в качестве аргументов список чисел, разделенных пробелами, и выводит сумму этих чисел. Базовая структура:

command! -nargs="*" -range Sum :call CalcSum(<f-args>)
function! CalcSum(...) range
   " 1. collect numbers from visual selection if there is a current active selection
   " 2. otherwise, if len(args) > 0, collect numbers from args
   " 3. other cases (i.e., no selection and no args or both selection and args) handled reasonably
   " 4. sum collection of numbers
   " 5. return/echo result
endfunction 

Шаги (2) - (5) просты. У меня проблемы с (1). Я использую маркеры « <» / «>», чтобы воссоздать набор чисел из визуального выделения. Но я хочу сделать это только в том случае, если есть визуальный выбор , который сейчас выделен / активен.

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

7
задан Jeet 1 December 2010 в 02:31
поделиться