我已经习惯了Emacs,但是我正在试用Vim,看看我更喜欢哪个。

我喜欢Emacs的一点是能够在Emacs内部运行终端。这在Vim内部可能吗?我知道您可以从Vim执行命令,但我希望能够在选项卡中运行终端。


当前回答

到目前为止,我已经尝试了很多这里提到的解决方案,我真正想要的是保持终端开放,同时在VsCode中编码类似的体验。然后我发现了一个对我非常有效的解决方法。

在安装之前:

我正在使用Nvim 0.5,但我认为它可以用于任何版本,并在vim上进行检查 我使用的是macOS卡特琳娜10.15.7版

设置集成终端

步骤1 -

创建名为myQuickTerminal的脚本。Vim或者任何你想要的名字。 输入以下脚本

"==============================================================================
"
" ▒█▀▀█ █░░█ ░▀░ █▀▀ █░█   ▀▀█▀▀ █▀▀ █▀▀█ █▀▄▀█ ░▀░ █▀▀▄ █▀▀█ █░░
" ▒█░▒█ █░░█ ▀█▀ █░░ █▀▄   ░▒█░░ █▀▀ █▄▄▀ █░▀░█ ▀█▀ █░░█ █▄▄█ █░░
" ░▀▀█▄ ░▀▀▀ ▀▀▀ ▀▀▀ ▀░▀   ░▒█░░ ▀▀▀ ▀░▀▀ ▀░░░▀ ▀▀▀ ▀░░▀ ▀░░▀ ▀▀▀
"
"==============================================================================
" " This is a script that will trigger a terminal quickly than the FloatTerminal
" open new split panes to right and below
"link: https://betterprogramming.pub/setting-up-neovim-for-web-development-in-2020-d800de3efacd
"==============================================================================
set splitright
set splitbelow
" turn terminal to normal mode with escape
tnoremap <Esc> <C-\><C-n>
" start terminal in insert mode
au BufEnter * if &buftype == 'terminal' | :startinsert | endif
" open terminal on ctrl+n
function! OpenTerminal()
  split term://zsh
  resize 10
endfunction
nnoremap <leader> n :call OpenTerminal()<CR>

注意:如果你因为特定的原因想运行bash而不是zsh,那么用bash替换zsh。

步骤2 -

我们来源它,把它放到init中。Vim代表neovim或'。Vimrc '表示vim

source $HOME/.config/nvim/modules/mySpecialScripts/myQuickTerminal.vim

这将在您保存和资源它之前预加载,您可以使用源$MYVIMRC快速重新加载初始化。vim文件。

步骤3 -

我映射,你可以看到在脚本n打开一个终端在一个新的窗格,我是(空格键),一旦我点击(空格+ n)终端将被触发,我将享受写我的代码,而终端是打开的。

按“Esc”键退出终端插入模式。 现在,要切换到代码编辑器窗格,使用CTRL+w w。一旦打开了两个以上的面板,这个快捷键就会变得很烦人,所以我也添加了以下快捷键。 我也映射了这些,以便在打开的窗格中快速跳转,使用这些

" Better window navigation
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l

可选

如果你想让你的终端用键退出当前缓冲区。你可以使用

tnoremap <Esc> <C-\><C-n>:q!<CR>

但是因为我想在我使用的几个缓冲区之间切换而不关闭我使用的终端:

tnoremap <Leader><Esc> <C-\><C-n>:q!<CR>

最终结果


参考:

https://betterprogramming.pub/setting-up-neovim-for-web-development-in-2020-d800de3efacd

其他回答

到目前为止,我已经尝试了很多这里提到的解决方案,我真正想要的是保持终端开放,同时在VsCode中编码类似的体验。然后我发现了一个对我非常有效的解决方法。

在安装之前:

我正在使用Nvim 0.5,但我认为它可以用于任何版本,并在vim上进行检查 我使用的是macOS卡特琳娜10.15.7版

设置集成终端

步骤1 -

创建名为myQuickTerminal的脚本。Vim或者任何你想要的名字。 输入以下脚本

"==============================================================================
"
" ▒█▀▀█ █░░█ ░▀░ █▀▀ █░█   ▀▀█▀▀ █▀▀ █▀▀█ █▀▄▀█ ░▀░ █▀▀▄ █▀▀█ █░░
" ▒█░▒█ █░░█ ▀█▀ █░░ █▀▄   ░▒█░░ █▀▀ █▄▄▀ █░▀░█ ▀█▀ █░░█ █▄▄█ █░░
" ░▀▀█▄ ░▀▀▀ ▀▀▀ ▀▀▀ ▀░▀   ░▒█░░ ▀▀▀ ▀░▀▀ ▀░░░▀ ▀▀▀ ▀░░▀ ▀░░▀ ▀▀▀
"
"==============================================================================
" " This is a script that will trigger a terminal quickly than the FloatTerminal
" open new split panes to right and below
"link: https://betterprogramming.pub/setting-up-neovim-for-web-development-in-2020-d800de3efacd
"==============================================================================
set splitright
set splitbelow
" turn terminal to normal mode with escape
tnoremap <Esc> <C-\><C-n>
" start terminal in insert mode
au BufEnter * if &buftype == 'terminal' | :startinsert | endif
" open terminal on ctrl+n
function! OpenTerminal()
  split term://zsh
  resize 10
endfunction
nnoremap <leader> n :call OpenTerminal()<CR>

注意:如果你因为特定的原因想运行bash而不是zsh,那么用bash替换zsh。

步骤2 -

我们来源它,把它放到init中。Vim代表neovim或'。Vimrc '表示vim

source $HOME/.config/nvim/modules/mySpecialScripts/myQuickTerminal.vim

这将在您保存和资源它之前预加载,您可以使用源$MYVIMRC快速重新加载初始化。vim文件。

步骤3 -

我映射,你可以看到在脚本n打开一个终端在一个新的窗格,我是(空格键),一旦我点击(空格+ n)终端将被触发,我将享受写我的代码,而终端是打开的。

按“Esc”键退出终端插入模式。 现在,要切换到代码编辑器窗格,使用CTRL+w w。一旦打开了两个以上的面板,这个快捷键就会变得很烦人,所以我也添加了以下快捷键。 我也映射了这些,以便在打开的窗格中快速跳转,使用这些

" Better window navigation
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l

可选

如果你想让你的终端用键退出当前缓冲区。你可以使用

tnoremap <Esc> <C-\><C-n>:q!<CR>

但是因为我想在我使用的几个缓冲区之间切换而不关闭我使用的终端:

tnoremap <Leader><Esc> <C-\><C-n>:q!<CR>

最终结果


参考:

https://betterprogramming.pub/setting-up-neovim-for-web-development-in-2020-d800de3efacd

更新答案(11年后…):

如果您选择使用tmux解决方案,我建议使用tmux而不是下面原始答案中建议的screen。 Vim 8.1现在有一个内置的终端,可以用:term命令打开。这提供了与其余Vim特性更完整的集成。


我肯定会推荐这样的检查。Vim是一个文本编辑器,而不是一个shell。

我会使用Ctrl+AS来水平分割当前窗口,或者在Ubuntu的屏幕和其他补丁版本中,你可以使用Ctrl+A|(管道)来垂直分割。然后使用Ctrl+ATab(或在某些系统上等价地使用Ctrl+ACtrl+I,这可能更容易键入)在窗口之间切换。还有其他命令可以更改窗口的大小和排列。

或者一种不太高级的使用屏幕的方法是打开多个全屏窗口并在它们之间切换。这是我通常做的,我只是偶尔使用分屏功能。

如果你不熟悉GNU屏幕生存指南问题的使用,它有很多好的提示。

在vim 8.1.3741中,只需输入:terminal在vim中启动一个终端。

尝试map:nnoremap]t:terminal<CR>更快!

:项

在Vim 8.1中添加。

请记住,每当终端窗口处于活动状态时,大多数击键将被简单地传递到终端,而不是具有它们通常的功能。Ctrl-W及其子命令是主要的例外。要向终端发送文字^W输入,请按Ctrl-W ..您也可以通过按Ctrl-W:打开Vim:命令行。其他Ctrl-W命令正常工作,因此无论当前选择的是什么类型的窗口,管理窗口的工作都是一样的。

:sh然后按Ctrl+D返回(bash)

更新:

您可以将vim中的Ctrl+D映射为run:sh,这允许您在bash和vim之间快速切换。

noremap <C-d>:sh<cr>