Как использовать переменную пути для установки файла словаря в Vimscript?

#vim #vim-plugin

Вопрос:

Я просто пытаюсь установить файл словаря в vimscript для автозаполнения. Это прекрасно работает следующим образом.

 setlocal dictionary =C:Usersearikvimfilespackpluginsstartvim-baanftpluginfontawesome.txt
 

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

 let g:path = fnamemodify(resolve(expand('<sfile>:p')), ':h')
let g:path = g:path . 'fontawesome.txt'

setlocal dictionary =g:path
 

Здесь я определяю глобальную переменную g:path . С тех пор как fontawesome.txt файл и файл сценария находятся в одной папке ~ftplugin , я нахожу расположение файла текущего файла сценария и добавляю fontawesome.txt в конце концов. Когда я это делаю echo g:path , это выглядит следующим образом, что выглядит правильно.

 C:Usersearikvimfilespackpluginsstartvim-baanftpluginfontawesome.txt
 

Однако, когда я спрашиваю Vim setlocal dictionary? , я получаю это;

 dictionary=g:path
 

Вместо того , чтобы принимать значение g:path , оно принимает g:path значение в виде строки или пути. Есть ли обходной путь для этого? Любая помощь будет высоко оценена!

Ответ №1:

Вы должны использовать :help :let.= , который обрабатывает выражения, вместо :help :set = того , который не:

 let amp;l:dictionary .= ',' .. g:path
 

Комментарии:

1. Это кажется гораздо более чистым решением, но я получаю ошибку ; Wrong variable type for = . И можно ли использовать let для локальных назначений?

Ответ №2:

Вы можете использовать :execcute {expr1} .. , который выполняет строку, полученную в результате вычисления {expr1} в качестве команды Ex.

 execute 'setlocal dictionary ='.g:path
 

Комментарии:

1. Это излишне сложно.

2. let amp;dictionary = похоже, выдает ошибку E734. Его можно использовать let amp;dictionary = amp;dictionary.','.g:path , но он может плохо обрабатывать ведущее , и дублированное значение.