2013-07-29 5 views
0

Я уверен, что на это будет простой ответ, но я еще не попал в правильную часть учебников и howtos.Передача параметра функции vim

У меня есть функция в моем .vimrc, чтобы помочь с созданием HTML. Это простая функция для переноса выделенного текста в тег с заданным именем. В настоящее время функция подписи выглядит следующим образом:

function! WrapInTag(tag) 

И у меня есть набор карт вверх, как это:

vmap <Leader>tag <Esc>:call WrapInTag(tagname)<CR> 

tagname Это является проблемой. Как настроить это, чтобы я мог выбрать блок текста, введите \tag b<CR> и выделите выделенный текст в b тегах? Ссылки на невероятно очевидные учебники, которые я еще не нашел, будут высоко оценены.

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

ответ

3

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

Для первого, Vimscript предлагает две функции getchar() для отдельных символов и input() для текста подтвержденной Введите. Нечто подобное должно работать:

vnoremap <Leader>tag <Esc>:call WrapInTag(nr2char(getchar()))<CR> 

(Примечание: You should use :noremap, он делает отображение невосприимчивым к переназначения и рекурсии.)

Выбор текста хранится в регистрах '< и '>. Вы можете использовать команду перемещения `` (или cursor()), чтобы перейти туда, или повторно выбрать выбор и заменить его, например. :normal! gvcNEW-TEXT.

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

+0

Функция ввода() была именно тем, что я был после, спасибо! У меня это работает, так что теперь пришло время перечитать соответствующие главы в «Learning vim» и выяснить, что делают все кусочки cobbled vimscript. – chooban

2

Удалить свою функцию и установить surround.

+2

Если он пытается это сделать в образовательных целях, он заслуживает более полного ответа, чем это ... – user1146332

+0

Я обязательно буду отмечать объемное звучание для более позднего, но я пытаюсь узнать больше о моем предпочтительном редакторе, чтобы я мог быть более эффективным с этим. Изучение правильной обработки функций кажется хорошим способом для этого. – chooban

+0

Я полностью согласен, но у меня нет vim под рукой, поэтому я не смог бы дать более обучающий ответ на данный момент. – romainl

Смежные вопросы