我正在尝试为 Windows 配置 Neovim。此配置的关键之一是可以访问终端仿真器(在 Vim 中切换和使用终端非常舒适)。但我无法让它工作。我使用 Neovim 二进制文件/Neovim-qt。我可以!
毫无问题地运行 shell 命令。
我也尝试过使用 shell 和 shellquote 变量,但效果不佳。
我尝试使用 Bash (MSYS2) 而不是 cmd.exe,但仍然没有运气。(!
仍然有效)
问题可能是外壳变量或某些权限。
我非常感谢任何帮助!
我正在尝试为 Windows 配置 Neovim。此配置的关键之一是可以访问终端仿真器(在 Vim 中切换和使用终端非常舒适)。但我无法让它工作。我使用 Neovim 二进制文件/Neovim-qt。我可以!
毫无问题地运行 shell 命令。
我也尝试过使用 shell 和 shellquote 变量,但效果不佳。
我尝试使用 Bash (MSYS2) 而不是 cmd.exe,但仍然没有运气。(!
仍然有效)
问题可能是外壳变量或某些权限。
我非常感谢任何帮助!
我认为使用let $PATH .= ';C:\cygwin64\bin'
ininit.vim
可能足以处理 shell 问题。
我按照http://vim.wikia.com/wiki/Use_cygwin_shell中的建议尝试了 vim 样式。这打破了 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 上对此进行了测试,但这可能对你也同样有效。
为 windows安装Git ,它还提供了一个 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,请参阅此答案。事实上,我在 git 存储库中使用了 .vim 脚本的层次结构,其中就是 terminal.vim:
" Terminal settings
" cc for commandline, cs for split first, ce to exit
:tnoremap <ESC> <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
nnoremap <Leader>cc :term<CR>adoskey.cmd<CR>cmd.exe /c "C:\\Progra~1\Git\bin\bash.exe --login -i"<CR>clear<CR>
nnoremap <Leader>cs :sp<CR>:wincmd j<CR>:term<CR>adoskey.cmd<CR>cls<CR>cmd.exe /c "C:\\Progra~1\Git\bin\bash.exe --login -i"<CR>clear<CR>
nnoremap <Leader>cd :term<CR>adoskey.cmd<CR>cls<CR>
nnoremap <Leader>csd :sp<CR>:wincmd j<CR>:term<CR>adoskey.cmd<CR>cls<CR>
else
nnoremap <Leader>cc :term<CR>A
nnoremap <Leader>cs :sp<CR>:wincmd j<CR>:term<CR>A
endif
augroup TerminalMappings
autocmd!
if has("win32")
autocmd TermOpen * nnoremap <buffer> <C-E> aexit<CR>exit<CR>
autocmd TermOpen * tnoremap <buffer> <C-E> exit<CR>exit<CR>
else
autocmd TermOpen * nnoremap <buffer> <C-E> aexit<CR>
autocmd TermOpen * tnoremap <buffer> <C-E> exit<CR>
endif
augroup END
" Make the split bigger
nnoremap <Leader>b 8<C-W>+<CR>
nnoremap <Leader>B 50<C-W>+<CR>
" Make the split wider
nnoremap <Leader>w 8<C-W>><CR>
nnoremap <Leader>W 56<C-W>><CR>
第一个命令重新映射 Control-[ 和 ESC 以退出终端模式,这看起来很自然,但默认情况下并非如此 - 正常模式允许您,例如,使用 cntrl-B 向后滚动,使用常用命令(或简单-motion ) 到包含 shell 命令的行并yypa<Enter>
执行它。
设置 shell=cmd.exe 实际上并不是必需的,因为它是为 windows 安装 vim 时的默认设置,但如果您想稍后更改它,明确说明它会有所帮助。
我在绑定中使用这些助记符;'c' 表示命令行,'s' 表示拆分,'d' 表示 DOS(windows CMD),'e' 表示退出。这提供了以下选项:
<leader>cc full screen bash terminal
<leader>cs - split screen bash terminal (used 99% of the time by me)
<leader>cd - full screen DOS terminal
<leader>csd - split screen DOS terminal
<leader>e - exit terminal
我还加载doskey.cmd
了可以通过 PATH 访问的某个地方,在我的情况下包含:
@echo off
DOSKEY ls=dir
DOSKEY which=where
DOSKEY mv=move
DOSKEY c=cls
DOSKEY clear=cls
DOSKEY bash=cmd.exe /c "C:\\Progra~1\Git\bin\bash.exe --login -i"
DOSKEY cp=copy
DOSKEY ..=cd ..
DOSKEY ...=cd ..\..
DOSKEY ....=cd ..\..\..
DOSKEY .....=cd ..\..\..\..
DOSKEY ......=cd ..\..\..\..\..
DOSKEY .......=cd ..\..\..\..\..\..
DOSKEY ........=cd ..\..\..\..\..\..\..
DOSKEY .........=cd ..\..\..\..\..\..\..\..
这类似于 ~/.bashrc 文件的别名,也允许我执行<leader>cd
并输入bash
以切换到 bash。