2015-01-10 3 views
1

Я хочу, чтобы превратить это:Почему моя пользовательская функция добавляет дополнительные «/!» (Vim)?

A 
a 
a 
B 
b 
b 

в этом:

a/! 
a/! 
b/! 
b/! 

Так что я написал пользовательскую функцию:

function PrepareDic() 
    :g/[A-Z]/d | :%s/$/\/!/g 
endfunction 

Но когда я :PrepareDic() я в конечном итоге с чем-то вроде это вместо этого:

a/!/! 
a/!/! 
b/!/! 
b/!/! 

Что я делаю неправильно?

ответ

4

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

Глобальная команда не может быть разделена полосой. Вместо этого он работает d | :%s/$/\/!/g на каждой строке с [A-Z]. Это, очевидно, неправильно. Чтобы исправить это, вам просто нужно запустить заменяющую команду после глобальной команды (что и было предусмотрено). Поскольку есть две строки с заглавными буквами, замена выполняется дважды. Таким образом, вы получаете /!/!, добавляя конец каждой строки.

Таким образом, должна быть фиксированная функция.

function PrepareDic() 
    g/[A-Z]/d 
    %s/$/\/!/g 
endfunction 

Если вы действительно хотите использовать панель для разделения команд вам необходимо пройти глобальное к exec. Однако это не обязательно.

exec 'g/[A-Z]/d' | %s/$/\/!/g 
Смежные вопросы