关于键盘快捷键:如何在Notepad ++中模仿Visual Studio的CTRL-X,CTRL-V功能?

How to mimic Visual Studio's CTRL-X, CTRL-V functionality in Notepad++?

我正在使用Notepad ++进行某些项目,并且错过了Visual Studio的Ctrl + XCtrl + C功能,可以在没有选择文本时剪切或复制整个当前行。 剪切线快捷方式似乎是Ctrl + L,这不像Ctrl + X那样方便,复制快捷方式似乎是Ctrl + DCtrl + L,这甚至不太方便。

虽然之前已经提出了类似的问题,但是没有提供在Notepad ++中执行此操作的方法,我无法在Notepad ++站点或其论坛上找到解决方案。


我已经创建了一个Notepad ++插件来实现这一点(不需要python)。它可以在https://bitbucket.org/zastrowm/notepad-visualstudiolinecopy找到。


合成所有其他答案和评论,以及一些未提及的其他必要步骤:

Scintilla提供了一个"copyAllowLine"命令来执行此操作。 Notepad ++不会在快捷方式映射器中公开该命令,但您可以从Python脚本中调用它并将Ctrl + C映射到该脚本。"cutAllowLine"没有相应的命令,但是会有一些额外的Python代码。必须将这些脚本添加到菜单中,并且Notepad ++必须重新启动才能在快捷方式映射器中可用。

  • 安装Python脚本插件(可以使用Notepad ++插件管理器完成)

  • 使用菜单Plugins - > Python Script - > New script创建以下两个python脚本

    copyAllowLine.py

    1
    editor.copyAllowLine()


    cutAllowLine.py

    1
    2
    3
    4
    if editor.getSelectionStart() == editor.getSelectionEnd():
        editor.lineCut()
    else:
        editor.cut()


  • Python脚本 - >配置

    • 在User Scripts下,为每个脚本添加一个菜单项。

  • 重启记事本++(重要)

  • 设置 - >快捷方式映射器...

    • 在Scintilla命令下,删除Ctrl + CCtrl + X的现有关联。

    • 在插件命令下,找到刚刚创建的脚本并将快捷方式映射到它们。

  • 注意:通过插件管理器安装时,安装了1.0.6版。当我试图在Notepad ++中运行任何与python相关的东西时,我从插件管理器中得到了一个未知异常。解决方案是从这里手动下载并安装1.0.8 .msi:1.0.8安装程序


  • 安装NppPython插件(可以使用Notepad ++插件管理器完成)
  • 使用菜单插件 - > Python脚本 - >新脚本创建此python脚本:

    1
    2
    3
    4
    if editor.getSelectionStart() == editor.getSelectionEnd():
        editor.lineCut()
    else:
        editor.cut()
  • 重启记事本++(重要)

  • 转到菜单设置 - >快捷键映射器 - >插件命令

  • 在列表中找到您刚刚创建的脚本,并为其设置CTRL + X快捷方式

  • 请享用!


  • 转到设置 - >快捷键映射器,然后单击顶部的"Scintilla命令"选项卡。在那里你应该能够将Ctrl + L命令更改为Ctrl + X


    来自MackieChan的插件:记事本 - 视觉工作室系列副本

    必须仍然设置如下:

  • 把它放到notepad ++ / plugin文件夹中

  • 打开记事本++(重启)

  • 在设置 - >快捷键映射器中

    在Scintilla命令下,删除Ctrl + C,X的现有关联

    在插件命令下,找到刚刚创建的脚本并将快捷方式映射到它们。


  • 您可以使用Python Script Notepad ++插件添加脚本,并将Ctrl + C分配给脚本(从快捷方式映射器中的SCI_COPY中删除Ctrl + C映射,Scintilla Commands选项卡)

    该脚本只是:

    1
    2
    3
    4
    5
    if editor.getSelectionStart() == editor.getSelectionEnd():
        line = editor.getCurLine()
        editor.copyText(line)
    else:
        editor.copy()

    显然,只需为Ctrl-X添加另一个类似的脚本即可删除该行。


    在https://github.com/kbilsted/NppPluginCutNCopyLine上有一个插件,它的开源代码很容易修改,如果你有额外的需求。


    你可以编写一个带有全局键事件挂钩的程序,每次你做一个Ctrl + X检查notepad ++是否是最重要的应用程序运行,抓住屏幕,检查是否选择了任何文本(通过查看截图和你的记事本++颜色)设置),并将WM_KEYPRESS消息发送到模拟Ctrl + L的记事本++窗口(假设您正在使用Windows)。

    (这不会把线放到剪贴板中,你必须做一些字符识别才能允许它)