Я написал ф-цию для того, чтобы комментировать выделенный блок.
fu! Comment()
'<,'>s/^/#/g
endfu
Я выделяю блок, затем нажимаю эскейп (перехожу в нормальный режим) и вызываю ее из командного режима, и в начало каждой строки выделенного блока добавляется решетка. Вот так:
#foo
#bar
#baz
Если же сразу перейти в командный режим из визуального, добавляется не одна, а сразу несколько решеток в каждую строку, вот так:
####foo
####bar
####baz
Почему так происходит?
И, заодно, еще один вопрос. Я копирую текст в системный (глобальный) буфер обмена
"+y<участок для копирования, например G>
и он копируется только один раз, вторично эта команда не срабатывает. В чем может быть причина этой ошибки?
Спасибо за ответ. Насчет второй части, я неточно выразился. При копировании любого участка, команда не работает. Т.е. она срабатывает единожды при открытии файла, а в дальнейшем копирование вообще не происходит, независимо от положения курсора, вверх, вниз - это без разницы.
В регистре, том, который «+ содержиться текст который был скопирован, но но при попытке вставить его куда-нибудь еще, по ctrl-v он не вставляется. Впрочем, сейчас попробовал несколько раз, он то вставляется, то нет. Раньше вообще после 1-го раза не вставлялся. Я не понял, честно-говоря, от чего это зависит. Может в самой системе что-нибудь глючит.
Ладно, буду наблюдать. Спасибо Вам, Вы и так помогли.
Если же сразу перейти в командный режим из визуального, добавляется не одна, а сразу несколько решеток в каждую строку, вот так:
При переходе в командный из визуального в начало командной строки автоматически вставляется '<,'>. Команда :'<,'>call Comment() выполняет Comment() для каждой строки, а Comment(), опять же для каждой строки, выполняет замену, поэтому получается двойной проход. Если после перехода из командного режима в визуальный стереть эти '<,'> и написать просто :call Comment(), все будет как надо.