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

时间:2017-02-03 13:55:16

标签: shell vim terminal-emulator neovim

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

我还试图尝试使用shell和shellquote vars,但它也不能正常工作。

我尝试使用Bash(MSYS2)代替cmd.exe,但仍然没有运气。 (!仍有效)

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

我非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

我认为在init.vim中使用/usr/bin/bash command not found可能足以处理shell问题。

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

这个select distinct b.name from product p inner join brand b on p.brand_id=b.id where p.cat=3 选项可能很有用:https://neovim.io/doc/user/term.html# $ TERM

答案 1 :(得分:0)

花了我很多年的时间,但终于有了Git Bash作为缓冲,并且!命令。我只在Windows 7上进行了测试,但这可能对您同样有效。

安装Git for windows,它也提供了一个Git Bash环境,我假设它称为C:\ Program Files(x86)\ Git \ bin \ bash.exe。如果您拥有32位系统或要在Windows上使用64位Git,则需要在以下脚本中将〜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,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命令开头。