7

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

我也尝试过使用 shell 和 shellquote 变量,但效果不佳。

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

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

我非常感谢任何帮助!

4

2 回答 2

1

我认为使用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

于 2018-04-06T02:30:11.080 回答
0

我花了很长时间,但我终于将 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。

于 2018-09-06T13:24:44.647 回答