Windows 从文件一次粘贴一行(或一节)

Windows 从文件一次粘贴一行(或一节),windows,clipboard,paste,presentation,Windows,Clipboard,Paste,Presentation,我是一名使用Windows的教师,希望能够将示例文件中的简短程序片段一个接一个地粘贴到我正在教授的任何编程环境中(例如python IDLE shell或编辑器)。在讲座期间,我会打开IDLE,然后使用Ctrl-v将文件中的第1行粘贴到IDLE,执行并讨论它,然后使用Ctrl-v将文件中的第2行粘贴到IDLE,执行并讨论它,然后使用Ctrl-v将第3行粘贴到IDLE,依此类推 我怀疑有一些方法可以通过剪贴板管理器来实现这一点,但还没有在网上找到它 能够粘贴代码段而不仅仅是一行代码也非常有用。文件

我是一名使用Windows的教师,希望能够将示例文件中的简短程序片段一个接一个地粘贴到我正在教授的任何编程环境中(例如python IDLE shell或编辑器)。在讲座期间,我会打开IDLE,然后使用Ctrl-v将文件中的第1行粘贴到IDLE,执行并讨论它,然后使用Ctrl-v将文件中的第2行粘贴到IDLE,执行并讨论它,然后使用Ctrl-v将第3行粘贴到IDLE,依此类推

我怀疑有一些方法可以通过剪贴板管理器来实现这一点,但还没有在网上找到它

能够粘贴代码段而不仅仅是一行代码也非常有用。文件中的代码段可以用空行或某种文本字符串指示符分隔


拥有此功能将允许我将所有示例准备在一个文件中,然后在讲座期间使用Ctrl-v一次快速访问所有示例。

从IdleX扩展名为IDLE(或整个IdleX)安装multilerun.py脚本。Idlex在以下位置可用:

如果要使其自动化,请执行以下操作:

import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
shell.AppActivate("Python 2.7.9 Shell") 
# or the title of your idle shell window
for line in source.readlines(): 
    # open your source file of examples 
    # better parse it into groups of commands
    # and work each group in a batch
    line= line.replace("(","{(}") # sendkeys escape
    line= line.replace(")","{)}")
    shell.SendKeys(line)
    shell.SendKeys("{ENTER}") # for good measure.  
"""SendKeys sends a string to the active window.
You can automate reading lines in batches linked to a button press etc
put in delays, copy per char etc 
Go to town and make it a mini slide show! 
"""

当您按Win+Ctrl+V(在Windows上)时,以下自动热键脚本将从剪贴板粘贴行,每次粘贴一行

如果您没有使用过自动热键,我强烈建议您使用

#^v::
{
    originalClipboard := Clipboard
    StringSplit, ClipLines, originalClipboard, `n`r
    size := StrLen(ClipLines1) + 3
    Clipboard = %ClipLines1%
    Send ^v`n   
    Clipboard := SubStr(originalClipboard, size)
    return
}
注意事项:

  • 它可能不能很好地处理行结尾--它只适用于两个字符的
    \r\n
    结尾(Windows标准)。这应该是大多数(如果不是所有的话)真实世界的用法
  • 自动热键似乎仅适用于Windows
  • 粘贴一行后,该行将从剪贴板中删除,以便准备下一行
  • 它总是一次粘贴一整行,即使源是部分行
  • 当剪贴板行用完时,它会粘贴空行,直到您意识到这一点
  • 它通过发送新行来添加新行。不确定这是否适用于所有文本编辑器,但它适用于记事本和我尝试过的其他一些编辑器
  • 可能还有其他细微差别,它不能很好地处理

不幸的是,我无法发表评论,但@Patrick的伟大解决方案仅在我添加
sleep
命令时对我有效-否则,在粘贴行之前,剪贴板内容会被覆盖。因此,如果您遇到类似问题,以下版本可能会这样做:

#^v::
{
    originalClipboard := Clipboard
    StringSplit, ClipLines, originalClipboard, `n`r
    size := StrLen(ClipLines1) + 3
    Clipboard = %ClipLines1%
    Send ^v`n   
    sleep, 500 ;
    Clipboard := SubStr(originalClipboard, size)
    return
}

绝对属于超级用户,因为你正在寻找一个工具来帮助你自动粘贴,而不是问如何编写这样一个工具。你有没有找到解决方案?没有。还没有听说过或找到一种方法来做到这一点。