Булева функция Vim - PullRequest
       8

Булева функция Vim

5 голосов
/ 01 августа 2011

Я пытаюсь реализовать булеву функцию в Vim, и у меня возникают проблемы, и я уверен, что что-то упускаю.

Просто чтобы прояснить ситуацию, я ищу функцию, которая, когдавызывается с помощью !, это будет наоборот.

Vim имеет множество логических функций, таких как list и paste.В моем случае, если у меня есть функция, которая говорит, открывает буфер, как:

:call MyFunction()

Тогда я хотел бы, чтобы это закрывало буфер, когда вызывается с !:

:call MyFunction()!

Не уверен, что это вообще возможно, и я не пытаюсь выяснить, как открыть или закрыть буфер, но на самом деле это логическая реализация.

Редактировать:

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

:MyCommand action

Это также можно назвать как:

:MyCommand action!

1 Ответ

6 голосов
/ 02 августа 2011

При создании команды задайте ей опцию -bang, а затем используйте <bang>, что расширится до взрыва или ничего. Затем, чтобы перенаправить это в вашу функцию, создайте специальный аргумент и проанализируйте его, чтобы увидеть, содержит ли он взрыв или нет. Примерно так: (включая то, что предложил ZyX)

function! Bang(bang)
    echo "With".((a:bang)?"":"out")." bang."
endfunction

command! -bang Bg call Bang(<bang>0)

Конечно, я не делаю правильные тесты, чтобы проверить, действительно ли a:bang - удар, но вы поняли.

:Bg
Without bang.  

:Bg!
With bang.
...