适用于Windows 10的Neovim终端仿真器配置

问题描述 投票:5回答:2

我正在尝试为Windows配置Neovim。这种配置的关键之一是访问终端仿真器(切换和使用Vim终端非常方便)。但我无法让它发挥作用。我使用Neovim二进制文件/ Neovim-qt。我可以使用!运行shell命令而不会出现问题。

我也尝试过使用shell和shellquote vars进行实验,但它也没有用。

我试图使用Bash(MSYS2)而不是cmd.exe,但仍然没有运气。 (!仍然有效)

问题可能是shell变量或一些权限。

我非常感谢任何帮助!

shell vim terminal-emulator neovim
2个回答
1
投票

我认为在let $PATH .= ';C:\cygwin64\bin'中使用init.vim可能足以解决shell问题。

我按照建议尝试了vim风格 http://vim.wikia.com/wiki/Use_cygwin_shell。这打破了vim-fugitive和vim-plug的错误提示,如/usr/bin/bash command not found(通过git push,git log)或cannot create leading directory(通过vim-plug克隆repos时)。我禁用它们后,逃犯和插头再次工作。

而这个$TERM选项可能会引起关注:https://neovim.io/doc/user/term.html# $ TERM


0
投票

它花了我很多年龄,但我终于得到了Git Bash作为缓冲区打开,而且!命令。我只在Windows 7上对此进行了测试,但这对您来说也很有用。

安装Git for windows,它也提供了一个Git Bash环境,我假设它被称为C:\ Program Files(x86)\ Git \ bin \ bash.exe。如果您有32位系统或想要使用64位Git for Windows,则需要在下面的脚本中将~2更改为~1。

您现在应该可以使用以下命令从常规Windows CMD提示符启动git bash:

cmd.exe /c "C:\Progra~2\Git\bin\bash.exe --login -i"

将下面的代码添加到您的vimrc文件中。假设您已使用Windows安装程序安装了NeoVim,则init.vim脚本应位于%APPDATA%/ .. / Local / nvim。有关如何从其他地方获取vimrc文件以配置NeoVim的信息,请参阅this answer

" Terminal settings
:tnoremap <C-[> <C-\><C-n>
if has("win32")
  " Note, you need to empty the file Git\etc\motd
  " to get rid of the 'Welcome to Git' message
  set shell=cmd.exe
  set shellcmdflag=/c\ \"C:\\Progra~2\\Git\\bin\\bash.exe\ --login\ -c\"

  " Leader c for commandline, Leader e to exit
  nmap <Leader>c :term<CR>acmd.exe /c "C:\\Progra~2\Git\bin\bash.exe --login -i"<CR>
  :tnoremap <Leader>e exit<CR>exit<CR>
endif

第一个命令重新映射Control- [退出终端模式,这似乎很自然但默认情况下不是真的。设置shell = cmd.exe实际上并不是必需的,因为它是为Windows安装vim时的默认设置,但是如果你以后想要调整运行它来运行它,它会有所帮助。

运行:term执行没有shellcmdflag的shell。使用:!ls通过shellcmdflag,然后命令shell。这个shellcmdflag值告诉cmd.exe运行bash,然后给出类似的-c标志,然后是你的命令。

接下来的两行映射<Leader>c以启动bash终端,而<Leader>e则退出终端进程。之后按Enter键关闭缓冲区。这种方法的好处是你可以运行:term来获得一个windows命令提示符,并且还有用于Git Bash的<Leader>c。默认的领导键是'\',我把它绑定到空格键。

如脚本中所述,Git Bash附带了一条欢迎消息,您可能希望将其清空,以便:!ls只显示ls的输出。它位于C:\ Program Files(x86)\ Git \ etc \ motd中。

不幸的是,这确实打破了:r!ls。使用默认设置:set shellcmdflag=/s\ /c:r!dir将目录列表放入当前缓冲区。但是,您可以使用system('ls')来实现相同的效果 - 对于自定义绑定,此变通办法的额外详细程度无关紧要。

同样不幸的是,在终端创建绑定的末尾添加clear<CR>不起作用;所以bash终端总是以显示打开bash的CMD命令开始。

© www.soinside.com 2019 - 2024. All rights reserved.