2010-04-23 4 views
10

vims 파이썬 sripting이 vims 레지스터로 제대로 작동하지 않고 버퍼와 파일을 편집하도록 설계된 것 같습니다. vim packages 명령 중 일부를 사용하여 레지스터에 액세스 할 수 있지만 그다지 좋지는 않습니다.vim에서 파이썬 함수의 레지스터에 액세스 할 수 있습니까

레지스터 을 사용하는 파이썬을 사용하여 vim 함수를 만드는 내 솔루션은 다음과 같습니다.

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으로 솔루션을 기반으로

def setRegister(reg, value): 
    vim.command("let @%s='%s'" % (reg, value.replace("'","''"))) 
+0

'파이썬 ​​>> EOF' 결과를. 어쩌면 당신은'python << EOF'를 사용할 것인가? – ZyX

+0

그리고'endfunction'을 잊어 버렸습니다. – ZyX

+0

Thx ZyX. 이제 해결되었습니다. –

답변

6

당신은 작은 따옴표를 사용하는 경우 당신이 필요로하는 모든이 하나와 작은 따옴표의 모든 선두로부터 대체하는 것입니다 인용 부호. 그런 뭔가 :

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'" 

의 차이의 (문서화되지 않은) 기능에 크게 의존 : 동안 첫 번째가 실패하고 두 번째가 성공합니다 (그리고 :execute의 개행 처리와 일반 파일 간의 차이점에 대한 단일 예는 아닙니다. 반면에, 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'"))) 
+0

이것은 완벽하게 작동하는 것 같습니다. 감사. 마지막 줄과는 별도로. + –

+3

약간 칙칙한 부분은 다음과 같습니다. vim.command ("let @r = '% s'"% arg.replace (" '", "'")) –

+0

replace 메소드에 대해 알지 못했습니다. 감사. – ZyX

관련 문제