2016-07-25 69 views
0

我有以下的源代码:切换到像编辑VIM interactivelly改变Python字符串

import sys, os 
import curses 
import textwrap 

if __name__ == "__main__": 
    curses.setupterm() 
    sys.stdout.write(curses.tigetstr('civis')) 
    os.system("clear") 
    str = "abcdefghijklmnopqrstuvwxyz" * 10 # only example 
    for line in textwrap.wrap(str, 60): 
    os.system("clear") 
    print "\n" * 10 
    print line.center(150) 
    sys.stdin.read(1) # read one character or #TODO 
    #TODO 
    # x = getc() # getc() gets one character from keyboard (already done) 
    # if x == "e": # edit 
    # updatedString = runVim(line) 
    # str.replace(line, updatedString) 

    sys.stdout.write(curses.tigetstr('cnorm')) 

该程序通过串由60个字符移动。 我想编辑的可能性(#TODO地方) 我想改变刚刚显示的字符串。

当按下某个键时,是否可以打开一个小的vim缓冲区?我会做一个编辑,当我按:w它会更新字符串。我希望vim编辑器不要更改终端中字符串的位置(我希望它居中)。

+0

这是可能的!可以打开缓冲区,编辑并保存。更新新缓冲区的内容会有点困难。你可以用不同的解决方案吗?例如,在打开一个新的缓冲区之后,一旦你编辑了它,你可以通过按ggvG来复制整个文件,然后通过y拷贝并粘贴到位,按p – SibiCoder

+0

@SibiCoder每个解决方案都值得尝试。 – xralf

回答

0

理念:

让我们选择我们的目的\o\w。 将光标置于“TO DO”或任何其他您喜欢的词上并按\o。 然后,它打开新标签。您可以在新缓冲区中写入任何内容,然后按\w。它会复制整个事物并关闭缓冲区,然后粘贴到当前缓冲区中的光标位置。

映射

:nmap \o cw<ESC>:tabnew<CR> 
    :nmap \w ggvG"wy:tabclose<CR>"wp 
+0

好吧,我试了一下。但是这是不同的,然后我在问这个问题。不管怎么说,还是要谢谢你。 – xralf

0

不完全是:你不能这样做的。程序通常无法读取您打印到屏幕上的内容。

可能制作一个程序,它在屏幕上显示文本和(知道它写了什么)将该信息传递给编辑器。例如,lynx(使用curses的应用程序)在屏幕上显示格式化的HTML页面,并提供将表单文本字段的内容传递给编辑器的功能,从编辑器读取更新的文件并重新显示形成。

1
def runVim(ln): 
    with tempfile.NamedTemporaryFile(suffix=".txt") as tmp: 
    tmp.write(ln) 
    tmp.flush() 
    call(['vim', '+1', '-c set filetype=txt', tmp.name]) # for centering +1 can be changed 
    with open(tmp.name, 'r') as f: 
     lines = f.read() 
    return lines 


... 
x = getch() 
    if x == "e": 
    updatedString = runVim(line) 
    str = str.replace(line, updatedString) 
print str 
...