2011-04-07 3 views
1

Как я могу освободить регистр, если пользователь вводит имя регистра?Пустой регистр в vimscript

p.e.
let r = inputdialog(toregister)
let @r = ""

(г = символ, полученный от inputdialog)

Это не работает либо:
let @{r} = ""

+0

Хорошо, пожалуйста, перефразируйте вопрос. 'если регистр создан из inputdialog', не ясен никаким размахом воображения – sehe

ответ

3
let r = inputdialog("which register do you want to empty?") 
exe 'let @'.r.' = ""' 

Не забудьте проверить r это один символ долго , и в пределах az диапазон (во избежание ввода кода)

+0

или'/',' -', '' ', ... – Benoit

+0

@Luc, спасибо, что работает. Все еще не понимаю, почему я не может использовать {} для создания переменной «на лету», как и для других переменных. – Reman

+0

@Remonn: регистры ограничены. Вы не можете создавать свои собственные регистры, 26 буквенных, плюс 10 цифровых регистров, а также некоторые специальные регистры ('/', '' ',' _', '-',': ','. ','% ',' # ',' * ',' + ',' ~ ',' = ', что самые специальные из всех) - все доступные регистры. См. ': Help registers'. Таким образом, нет никакого реестра, который вы можете создавать, удалять, удалять или использовать во внешнем виде вне этого списка. – Benoit

4

Вместо использования :execute и того, чтобы быть в курсе кода инъекций Я предлагаю вам использовать setreg функцию:

call setreg(tolower(r), "") 

tolower() здесь потому, что если пользователь предоставляет A как имя регистра, то пустая строка будет добавлена ​​к a регистр вместо того, чтобы опорожнить его.

setreg() будет принимать только первый байт из r и если это действительно имя регистра, то ошибки не будет выброшено (setreg("abc", "") опустошает регистр a).

+0

приятное решение! Спасибо. – Reman

+0

Решение ZyX намного лучше, чем мое, когда доступно 'setreg()'. –

Смежные вопросы