我正在尝试为Windows配置Neovim。这种配置的关键之一是访问终端仿真器(切换和使用Vim终端非常方便)。但我无法让它发挥作用。我使用Neovim二进制文件/ Neovim-qt。我可以使用!
运行shell命令而不会出现问题。
我也尝试过使用shell和shellquote vars进行实验,但它也没有用。
我试图使用Bash(MSYS2)而不是cmd.exe,但仍然没有运气。 (!
仍然有效)
问题可能是shell变量或一些权限。
我非常感谢任何帮助!
我认为在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
它花了我很多年龄,但我终于得到了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命令开始。