g/pattern1/,/pattern2/execute "w ".fnameescape(tempname())<CR>
Используйте execute
всякий раз, когда вы хотите вставить переменную в командную строку, если это отображение. Если это не так, попробуйте использовать
g/pattern1/,/pattern2/w <C-r>=fn<Tab>e<Tab>te<Tab>)<CR><CR>
Здесь fn<Tab>
с wildmode=longest,list:full
расширится до fname
, fnamee<Tab>
увеличится до fnameescape(
, te<Tab>
расширится до tempname()
, так что это короткий способ ввода <C-r>=fnameescape(tempname())<CR>
. Вы можете опустить fnameescape
, если уверены, что tempname
не вернет имя файла со специальными символами.
И обратите внимание, что обратные галочки не будут выполнять функцию vimscript, они выполняют команду оболочки, поэтому `tempname()`
пытается вызвать tempname()
в оболочке и заменить имя файла результатом этого вызова. Согласно справке, вы должны были написать `=tempname()`
.