LINUX.ORG.RU

Вопрос по vimscript

 , ,


0

2

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


fu! Comment()
    '<,'>s/^/#/g
endfu

Я выделяю блок, затем нажимаю эскейп (перехожу в нормальный режим) и вызываю ее из командного режима, и в начало каждой строки выделенного блока добавляется решетка. Вот так:

#foo
#bar
#baz

Если же сразу перейти в командный режим из визуального, добавляется не одна, а сразу несколько решеток в каждую строку, вот так:

####foo
####bar
####baz

Почему так происходит?

И, заодно, еще один вопрос. Я копирую текст в системный (глобальный) буфер обмена

"+y<участок для копирования, например G>
и он копируется только один раз, вторично эта команда не срабатывает. В чем может быть причина этой ошибки?

Спасибо!



Последнее исправление: selena-gomes (всего исправлений: 3)

Может лучше что-нибудь вроде: NERD Commenter. А то по-хорошему надо смотреть comment-string, а может быть нужны парные, уже сложнее получается.

anonymous
()
Ответ на: комментарий от arrecck

»+ygg )

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

selena-gomes
() автор топика
Ответ на: комментарий от arrecck

В регистре, том, который «+ содержиться текст который был скопирован, но но при попытке вставить его куда-нибудь еще, по ctrl-v он не вставляется. Впрочем, сейчас попробовал несколько раз, он то вставляется, то нет. Раньше вообще после 1-го раза не вставлялся. Я не понял, честно-говоря, от чего это зависит. Может в самой системе что-нибудь глючит.

Ладно, буду наблюдать. Спасибо Вам, Вы и так помогли.

selena-gomes
() автор топика

Переходи на emacs, там на много более простой и понятный лисп. Я после 5 лет вима так и сделал.

Puzan ★★★★★
()

Если же сразу перейти в командный режим из визуального, добавляется не одна, а сразу несколько решеток в каждую строку, вот так:

При переходе в командный из визуального в начало командной строки автоматически вставляется '<,'>. Команда :'<,'>call Comment() выполняет Comment() для каждой строки, а Comment(), опять же для каждой строки, выполняет замену, поэтому получается двойной проход. Если после перехода из командного режима в визуальный стереть эти '<,'> и написать просто :call Comment(), все будет как надо.

anonymous
()
Ответ на: Sage от anonymous

Я не из этих, просто мыло свободное было с таким названием, зарегился, чтоб не путаться.:)

selena-gomes
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.