vi 示例

vi 示例

我正在运行 Windows 并且缺少vim;是否可以使用 Notepad++ 从 Windows 命令提示符运行命令并将输出放在 notepad++ 缓冲区中?

答案1

在我看来,原始 Q 是关于 Notepad++ 支持类似于 vi 的功能,即将stdoutshell 命令的输出 () 读入当前文档(general buffer在 vi 术语中),

vi 示例

:r! ls

描述

:ex行编辑器命令) r (读取) ! (从 shell 中,将stdout命令的输出() ls放入当前文档中(未指定,默认为读入general buffer

Notepad++ v 7.7.1(32 位)示例

F5

或浏览菜单系统,跑步 menu跑步.. menu-item

在对话框的文本框中输入所需的命令notepad++ Run

cmd.exe /c echo %DATE% | clip

进入 key或单击跑步 button

Ctrl+V将剪贴板的内容放入 Notepad++ 文档中。

答案2

是否可以使用 Notepad++ 从 Windows 命令提示符运行命令并将输出放在 Notepad++ 缓冲区中?

据我所知,不是直接的。也就是说,批处理文件在这种情况下可能会有所帮助,例如:

@rem Redirects both STDOUT and STDERR to e.g. cli_tmp.txt
%* > C:\temp\cli_tmp.txt 2>&1 
"C:\Program Files (x86)\Notepad++\notepad++.exe" C:\temp\cli_tmp.txt
exit()

如果您将其保存为前任。 打开npp脚本并在你的 Windows 中注册它Path,然后你就可以使用前任。

open_npp echo hello

在命令提示符下,来自echo hello(即hello)的文本输出将显示在标记为 的新 Notepad++ 选项卡中cli_tmp.txt。此外,您可以使用 Notepad++跑步...菜单项来执行以获得与从命令行cmd /k open_npp echo hello运行相同的效果 。open_npp echo hello

笔记

  • 这种方法的最大缺点是您可能需要在每次运行时复制输出或使用不同的标题重新保存临时文档,因为每次调用批处理文件时您的输出通常会被覆盖。

  • 正如在给出的批处理示例中一样,STDERR 的输出被写入临时文件(而不是控制台),并且命令窗口在完成后立即关闭(exit())。但是,这种行为显然可以改变。

  • 此方法可能无法正确捕获交互式命令输入/输出。同样,如果某个进程挂起或耗时太久,您可能只能猜测到底发生了什么。

  • 我使用这种批处理文件从来没有遇到过问题,但总会有极端情况。=P

答案3

您可以使用猪肉2香肠.只需打开插件管理在较新的 Notepad++ 中,或者安装插件管理器在旧版本中,则从那里安装插件。否则,请转到插件中心并手动下载 zip 文件

一旦您的转换器(接受输入然后生成输出的控制台程序)使用 Pork to Sausage 插件正确设置,该插件就会将选定的文本转换为您想要的任何内容。

这个插件的吸引人的地方在于它的灵活性:可以用任何语言(例如 java 或 .Net)编写一个(或多个)小程序,或者使用其他程序来转换您在 Notepad++ 中选择的文本。

最多可定制 20 个命令。

插件中心


编辑:旧链接不再有效,因此我将其替换为存档链接。您可以找到新的更新列表这里

安装后打开插件 > 移植到香肠 > 编辑用户命令并将您想要的任何命令添加到 ini 文件中。如果它不在那里,您需要先创建它。之后重新启动 Notepad++ 以便插件重新加载新配置

下面是将选定的文本转换为大写的示例(当然,实际上您应该使用 Notepad++ 内置的大小写转换功能)

[toupper]
progPath=C:\Windows\System32\cmd.exe
progCmd=cmd /c "echo $(SELECTION) | tr [:lower:] [:upper:]"
workDir=C:\Users\...\tmp

假设您的路径中有 GNU 工具。您还可以使用已可供所有人使用的 PowerShell:

[toupper]
progPath=C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe
progCmd=powershell -C "Write-Host -NoNewline '$(SELECTION)'.ToUpper()"
workDir=C:\Users\...\AppData\Local\Temp

要使上述示例能够处理换行符或特殊字符,需要稍微复杂一些,因为您需要添加另外 2 个选项progInput,并progOutput传递输入字符串并将输出读回文件,如下所示

[toupper_multiline]
progPath=C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe
progCmd=powershell -C "$t = '$(TIMESTAMP)'; (Get-Content -Encoding ascii ('C:\Users\user\AppData\Local\Temp\in_' + $t)).ToUpper() | Set-Content -Encoding ascii ('C:\Users\user\AppData\Local\Temp\out_' + $t)"
workDir=C:\Users\user\AppData\Local\Temp
progInput=C:\Users\user\AppData\Local\Temp\in_$(TIMESTAMP)
progOutput=C:\Users\user\AppData\Local\Temp\out_$(TIMESTAMP)

请注意,由于插件中编码处理存在一些错误,它目前无法正常工作

您还可以使用 阻止输出覆盖所选文本replaceSelection。您可以在插件的注释或pork2Sausage.ini

答案4

不。您可以在 Windows 上安装 Vim 或 Emacs。您也可以在 Notepad++ 中编写命令并保存到批处理文件 (.bat);双击该文件即可运行命令。

相关内容