2010-12-30 8 views
0

У меня есть следующий ВИМ-функция:В чем проблема с 'execute' w! "+ A: name 'в скрипте/функции vim?

fu! Create_file_and_write_to_it(name, text) 

    new 
    execute "normal i" . a:text 
    execute "w! " + a:name 

endfu 

Я называю эту функцию следующим образом:

:call Create_file_and_write_to_it('c:\temp\foo.txt', "here is some text") 

В то время как он создает новый буфер и записывает нужный текст (то есть: здесь некий текст) в буфер, он не записывает буфер в файл с именем c: \ temp \ foo.txt или любое другое имя, которое я мог видеть. Я также не получаю сообщение об ошибке.

Есть ли причина для такого поведения, или я делаю что-то неправильно, и как я могу получить желаемую функциональность?

ответ

2

Ничего ... Я нашел его.

я написал

execute "w! " . a:name 

вместо

execute "w! " + a:name 
+1

Вы забыли о возможности наличия пробелов в имени файла вы должны быть написаны либо 'выполнить" ш! ".fnameescape (a: name)' или 'w! = a: name ' (заменить '' с '\' '). – ZyX

1

Вместо

execute "w! " + a:name 

сделать это:

exec "save! " . a:name 

Работал для меня

1

Если только: текст не имеет некоторые специальные последовательности/отображение, чтобы срабатывать, вы можете также использовали put=a:text

+0

Но это запустит новую строку. Однако вы можете сделать« normal! i^R^O = a: text^M' – Benoit

+0

Для этого требуется ': delete' очистить любую новую строку. –