Действительно ли можно ли получить доступ к регистрам от функций Python в энергии

Кажется, что Python энергий sripting разработан к буферу редактирования и файлам, а не работайте приятно с регистрами энергий. Можно использовать некоторые команды пакетов энергии для получения доступа к регистрам, но не симпатичному.

Мое решение для создания функции энергии использование Python, который использует регистр, является чем-то вроде этого.

function printUnnamedRegister()
python <<EOF
print vim.eval('@@')
EOF
endfunction

Установка регистров может также быть возможным использованием чего-то как

function setUnnamedRegsiter()
python <<EOF
s = "Some \"crazy\" string\nwith interesting characters"
vim.command('let @@="%s"' % myescapefn(s) )
EOF
endfunction

Однако это чувствует себя немного громоздким, и я не уверен точно, каков myescapefn должен быть. Таким образом, я никогда не мог заставить версию установки работать правильно.

Таким образом, если существует способ сделать что-то больше как

function printUnnamedRegister()
python <<EOF
print vim.getRegister('@')
EOF
endfunction

function setUnnamedRegsiter()
python <<EOF
s = "Some \"crazy\" string\nwith interesting characters"
vim.setRegister('@',s)
EOF
endfunction

Или даже хорошая версия myescapefn, я мог использовать затем это, будет очень удобна.

ОБНОВЛЕНИЕ:

На основе решения ZyX я использую эту часть Python

def setRegister(reg, value):
  vim.command( "let @%s='%s'" % (reg, value.replace("'","''") ) )
10
задан Michael Anderson 23 April 2010 в 04:39
поделиться

1 ответ

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

python import vim, re
python def senclose(str): return "'"+re.sub(re.compile("'"), "''", str)+"'"
python vim.command("let @r="+senclose("string with single 'quotes'"))

Обновление : этот метод в значительной степени опирается на (недокументированную) особенность различия между

let abc='string
with newline'

и

execute "let abc='string\nwith newline'"

: в то время как первое не удается, второе успешно (и это не единственный пример различий между обработкой новой строки в : выполнить и простые файлы). С другой стороны, eval () несколько более ожидаемо справится с этим, поскольку string ("string \ nwith newline") возвращает то же самое, что и senclose . , поэтому я пишу это сейчас только с помощью vim.eval :

python senclose = lambda str: "'"+str.replace("'", "''")+"'"
python vim.eval("setreg('@r', {0})".format(senclose("string with single 'quotes'")))
6
ответ дан 4 December 2019 в 03:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: