vimä¸æ§è¡pythonå½ä»¤
å¨vimä¸å¯ä»¥ä½¿ç¨py[thon] {stmt}æ¥æ§è¡pythonè¯å¥{stmt}ï¼ä½ å¯ä»¥ç¨:python print "Hello World!"æ¥éªè¯ä¸ä¸ã
åªè½æ§è¡ä¸æ¡è¯å¥ï¼æ²¡ä»ä¹ç¨ï¼ä¸æ¯åï¼æ以ææ´å 强大çæ¥å£ï¼è¯æ³å¦ä¸ï¼
py[thon] << {endmarker}
{script}
{endmarker}
<!-- more -->
è¿æ ·æ们就å¯ä»¥æ§è¡pythonèæ¬{script}ä¸çå
容äºã{endmarker}æ¯ä¸ä¸ªæ 记符å·ï¼å¯ä»¥æ¯ä»»ä½å
容ï¼ä¸è¿{endmarker}åé¢ä¸è½æä»»ä½ç空ç½å符ãçä¸ä¸ªç®åçä¾åï¼å设ä¸é¢ä»£ç ä¿å为script_demo.vimï¼
function! Foo()
python << EOF
class Foo_demo:
def __init__(self):
print 'Foo_demo init'
Foo_demo()
EOF
endfunction
é£ä¹å¨vimä¸æ们å
ç¨:source path_to_script/script_demo.vimæ¥å è½½èæ¬ï¼ç¶åå°±å¯ä»¥ç¨:call Foo()æ¥è¿è¡pythonèæ¬äºï¼æ´ä¸ªè¿ç¨å¦å¾æ示ï¼
æ¤å¤ï¼æ们è¿å¯ä»¥å°pythonèæ¬æ¾å°ä¸ä¸ªåç¬ç.pyæ件ä¸ï¼ç¶åç¨pyf[ile] {file}æ¥è¿è¡pythonæ件ä¸çç¨åºï¼è¦æ³¨æè¿épyf[ile]åé¢çææåæ°è¢«çåæ¯ä¸ä¸ªæ件çååã
vim模å
æ们已ç»å¯ä»¥å¨vimä¸æ§è¡pythonå½ä»¤äºï¼ä½æ¯pythonæä¹è·åvimä¸çä¸äºä¿¡æ¯å¢ï¼æ¯å¦è¯´ææ³ç¥évimå½åç¼å²åºä¸å
±æå¤å°è¡å
容ï¼ç¶åè·åæåä¸è¡çå
容ï¼ç¨python该æä¹åå¢ï¼
äºæ¯vimæä¾äºä¸ä¸ªpython模åï¼æ趣çæ¯æ¨¡åååå°±å«åvimï¼æ们å¯ä»¥ç¨å®æ¥è·åvimç¼è¾å¨éé¢çææä¿¡æ¯ãä¸é¢é®é¢ç¨ä»¥ä¸pythonèæ¬å°±å¯ä»¥è§£å³äºï¼
function! Bar()
python << EOF
import vim
cur_buf = vim.current.buffer
print "Lines: {0}".format(len(cur_buf))
print "Contents: {0}".format(cur_buf[-1])
EOF
endfunction
ä½ å¯ä»¥èªå·±å è½½èæ¬è¿è¡ä¸ä¸è§è¯å¥è¿¹ï¼ä¸é¢ä»£ç åºç°äºvim.current.bufferï¼æ³å¿
ä½ å·²ç»ä»ååçå°äºå®çææäºï¼ä¸è¿è¿æ¯æ¥è¯¦ç»çä¸å§ï¼
vim模åä¸ç常é
vim.buffers: ç¨æ¥è®¿é®vimä¸ç¼å²åºçå表对象ï¼å¯ä»¥è¿è¡å¦ä¸æä½ï¼
:py b = vim.buffers[i] # Indexing (read-only)
:py b in vim.buffers # Membership test
:py n = len(vim.buffers) # Number of elements
:py for b in vim.buffers: # Iterating over buffer list
vim.windows: ç¨æ¥è®¿é®vimä¸çªå£çå表对象ï¼åvim.buffersæ¯æçæä½åºæ¬ç¸ã
vim.current: ç¨æ¥è®¿é®vimä¸å½åä½ç½®çåç§ä¿¡æ¯ï¼æ¯å¦ï¼
vim.current.line
vim.current.buffer
vim.current.window
vim.current.tabpage
vim.current.range
vim.vvars: 类似åå
¸ç对象ï¼ç¨æ¥åå¨global(g:)åéæè
vim(v:)åéã
è¿æå
¶ä»çä¸äºå¸¸éï¼è¿éä¸ååè¿°ã注æè¿éç常é并ä¸æ¯çæ£æä¹ä¸ç常éï¼ä½ å¯ä»¥éæ°ç»ä»ä»¬èµå¼ãä½æ¯æ们åºè¯¥é¿å
è¿æ ·åï¼å 为è¿æ ·ä¼ä¸¢å¤±è¯¥å¸¸éå¼ç¨çå¼ãç°å¨ä¸ºæ¢æ们已ç»è½è·åvimä¸æ°æ®ï¼ç¶åç¨pythonæ¥å¯¹å
¶è¿è¡æä½ï¼ä¼¼ä¹å®ç¾äºã
ä¸è¿vim并没ææ¢æ¥äºæ¤ï¼å®å¯æ¯Stronger than Strongerï¼å 为æ们å¯ä»¥å¨pythoné使ç¨vim强大çå½ä»¤éï¼è¿æ ·å°±å¯ä»¥ç¨pythonåä¸äºå¸¸ç¨çæ¹å¤çæ件ï¼çä¸é¢ç®åçä¾åï¼
function! Del(number)
python << EOF
import vim
num = vim.eval("a:number")
vim.command("normal gg{0}dd".format(num))
vim.command("w")
EOF
endfunction
å¯ä»¥è°ç¨ä¸é¢å½æ°Del(n)ç¨æ¥å é¤å½åç¼å²åºånè¡çå
容ï¼åªæ¯ç¤ºä¾èå·²ï¼ç°å®ä¸å«è¿ä¹åï¼ï¼ä¸é¢ç¨å°äºevalåcommandå½æ°ï¼å¦ä¸ï¼
vim模åä¸ä¸¤ä¸ªä¸»è¦çæ¹æ³
vim.command(str): æ§è¡vimä¸çå½ä»¤str(ex-modeï¼å½ä»¤æ¨¡å¼ä¸çå½ä»¤)ï¼è¿åå¼ä¸ºNoneï¼æ¯å¦ï¼
:py vim.command("%s/aaa/bbb/g")
ä¹å¯ä»¥ç¨`vim.command("normal "+str)`æ¥æ§è¡normal模å¼ä¸çå½ä»¤ï¼æ¯å¦è¯´ç¨ä»¥ä¸å½ä»¤å é¤å½åè¡çå
容ï¼
:py vim.command("normal "+'dd')
vim.eval(str): ç¨vimå
é¨ç解éå¨æ¥è®¡ç®strä¸çå
容ï¼è¿åå¼å¯ä»¥æ¯å符串ãåå
¸ãæè
å表ï¼æ¯å¦è®¡ç®12+12çå¼ï¼
:py print vim.eval("12+12")
å°è¿åç»ç®ç»æ24ã
åé¢çDelå½æ°è¿æä¾äºä¸ä¸ªnumberåæ°ï¼å¨vimLéé¢å¯ä»¥éè¿let arg=a:numberæ¥ä½¿ç¨ï¼å¨pythonä¸éè¿vim.eval("a:number")æ¥ä½¿ç¨ãä¹å¯ä»¥éè¿åæ°ä½ç½®æ¥è®¿é®ï¼æ¯å¦let arg=a:0æè
æ¯vim.eval("a:0")ãæ们å¯ä»¥ä½¿ç¨"..."æ¥ä»£æ¿å½ååæ°æ¥å®ä¹ä¸ä¸ªè½æ¥æ¶ä»»ææ°éåæ°çå½æ°ï¼ä¸è¿è¿æ ·åªè½éè¿ä½ç½®æ¥è®¿é®ã
vim模åè¿æä¾äºä¸ä¸ªå¼å¸¸å¤ç对象vim.errorï¼ä½¿ç¨vim模åæ¶ä¸æ¦åºç°é误ï¼å°ä¼è§¦åä¸ä¸ªvim.errorå¼å¸¸ï¼ç®åçä¾åå¦ä¸ï¼
try:
vim.command("put a")
except vim.error:
# nothing in register a
vim模åæä¾ç对象
å°è¿éä½ åºæ¬è½ç¨pythonæ¥å¯¹ç¼å²åºè¿è¡åºæ¬çæä½ï¼æ¯å¦å é¤è¡æè
æ¯å¨æå®è¡æ·»å å
容çãä¸è¿å¨ç¼å²åºæ·»å å
容ä¼å¾ä¸pythonerï¼å ä¸ºä½ å¾ä½¿ç¨commandæ¥è°ç¨vimçi/I/a/Aå½ä»¤ã好å¨ææ´ç§å¦çæ¹å¼ï¼é£å°±æ¯å©ç¨vim模åæä¾ç对象æ¥è¿è¡æä½ï¼çä¸é¢ç®åçä¾åï¼
function! Append()
python << EOF
import vim
cur_buf = vim.current.buffer
lens = len(cur_buf)
cur_buf.append('" Demo', lens)
EOF
endfunction
Appendå½æ°å¨å½åç¼å²åºçç»å°¾æ·»å 注éå
容" Demoï¼ç¼å²åºå¯¹è±¡æ¯æä¹ä¸ä¼å¿äºå¢ï¼
ç¼å²åºå¯¹è±¡
vim模åæä¾äºç¼å²åºå¯¹è±¡æ¥è®©æ们对ç¼å²åºè¿è¡æä½ï¼è¯¥å¯¹è±¡æ两个åªè¯»å±æ§nameånumberï¼name为å½åç¼å²åºæ件çå称ï¼å
å«ç»å¯¹è·¯å¾ï¼ï¼number为ç¼å²åºçæ°éãè¿æä¸ä¸ªboolå±æ§validï¼ç¨æ¥æ è¯ç¸å
³ç¼å²åºæ¯å¦è¢«æ¦é¤ã
ç¼å²åºå¯¹è±¡æ以ä¸å ç§æ¹æ³:
b.append(str): å¨å½åè¡çä¸é¢æå
¥æ°çè¡ï¼å
容为strï¼
b.append(str, n): å¨ç¬¬nè¡çä¸é¢æå
¥æ°çè¡ï¼å
容为strï¼
b.append(list)
b.append(list, n): æå
¥å¤è¡å°ç¼å²åºä¸ï¼
b.range(s,e): è¿åä¸ä¸ªrange对象表示ç¼å²åºä¸så°eè¡çå
容ã
注æ使ç¨appendæ·»å æ°è¡stræ¶ï¼strä¸ä¸å®ä¸è½å
å«æ¢è¡ç¬¦"\n"ãstrç»å°¾å¯ä»¥æ"\n"ï¼ä½ä¼è¢«å¿½ç¥æã
ç¼å²åºå¯¹è±¡çrangeæ¹æ³ä¼è¿åä¸ä¸ªrange对象æ¥ä»£è¡¨é¨åçç¼å²åºå
容ï¼é£ä¹range对象åæé£äºå±æ§ä»¥åæ¹æ³å¢?
å
¶å®å¨æä½ä¸range对象åç¼å²åºå¯¹è±¡åºæ¬ç¸åï¼é¤äºrange对象çæä½åæ¯å¨æå®çåºåä¸ãrange对象æ两个å±æ§startåendï¼åå«æ¯range对象çèµ·å§åç»å°¾è¡ãå®çæ¹æ³ær.append(str)ï¼r.append(str,
n)år.append(list)ï¼r.append(list, n)ã
æ们å¯ä»¥éè¿vim.windowsæ¥è·åvimä¸ççªå£å¯¹è±¡ï¼æ们åªè½éè¿çªå£å¯¹è±¡çå±æ§æ¥å¯¹å
¶è¿è¡æä½ï¼å 为å®æ²¡ææä¾æ¹æ³æè
å
¶ä»æ¥å£æ¥æä½ãå
¶ä¸åªè¯»å±æ§æbufferãnumberãtabpageçï¼è¯»åå±æ§æcursorãheightãwidthãvalidçãå
·ä½å¯ä»¥æ¥ç帮å©:h python-window
温馨提示:内容为网友见解,仅供参考