Как я могу освободить регистр, если пользователь вводит имя регистра?Пустой регистр в vimscript
p.e.
let r = inputdialog(toregister)
let @r = ""
(г = символ, полученный от inputdialog)
Это не работает либо:
let @{r} = ""
Как я могу освободить регистр, если пользователь вводит имя регистра?Пустой регистр в vimscript
p.e.
let r = inputdialog(toregister)
let @r = ""
(г = символ, полученный от inputdialog)
Это не работает либо:
let @{r} = ""
let r = inputdialog("which register do you want to empty?")
exe 'let @'.r.' = ""'
Не забудьте проверить r
это один символ долго , и в пределах az диапазон (во избежание ввода кода)
или'/',' -', '' ', ... – Benoit
@Luc, спасибо, что работает. Все еще не понимаю, почему я не может использовать {} для создания переменной «на лету», как и для других переменных. – Reman
@Remonn: регистры ограничены. Вы не можете создавать свои собственные регистры, 26 буквенных, плюс 10 цифровых регистров, а также некоторые специальные регистры ('/', '' ',' _', '-',': ','. ','% ',' # ',' * ',' + ',' ~ ',' = ', что самые специальные из всех) - все доступные регистры. См. ': Help registers'. Таким образом, нет никакого реестра, который вы можете создавать, удалять, удалять или использовать во внешнем виде вне этого списка. – Benoit
Вместо использования :execute
и того, чтобы быть в курсе кода инъекций Я предлагаю вам использовать setreg
функцию:
call setreg(tolower(r), "")
tolower()
здесь потому, что если пользователь предоставляет A
как имя регистра, то пустая строка будет добавлена к a
регистр вместо того, чтобы опорожнить его.
setreg()
будет принимать только первый байт из r
и если это действительно имя регистра, то ошибки не будет выброшено (setreg("abc", "")
опустошает регистр a
).
приятное решение! Спасибо. – Reman
Решение ZyX намного лучше, чем мое, когда доступно 'setreg()'. –
Хорошо, пожалуйста, перефразируйте вопрос. 'если регистр создан из inputdialog', не ясен никаким размахом воображения – sehe