我已经习惯了Emacs,但我正在尝试Vim,看看我更喜欢哪一个.
我喜欢Emacs的一件事是能够在Emacs中运行终端.这可能在Vim内部吗?我知道您可以从Vim执行命令,但我希望能够在选项卡内运行终端.
Kyl*_*mek 231
从2011年8月开始过时
查看Conque Shell(也在GitHub上).允许您在vim中运行任何交互式程序,而不仅仅是shell.
Dav*_*dge 195
我不确定你想要实现的是什么(我从未使用过Emacs),但你可以通过输入以下命令在Vim中运行命令:
:! somecommand [ENTER]
Run Code Online (Sandbox Code Playgroud)
如果你想输入几个命令,或者在shell中玩一段时间,你总是可以使用:
:! bash (or your favourite shell) [ENTER]
Run Code Online (Sandbox Code Playgroud)
命令或shell终止后,您将可以选择按Enter返回编辑器窗口
Vim是故意轻量级的,缺乏执行非编辑类型的功能,就像在Vim窗格/选项卡中运行一个完整的shell一样,但如上所述,有第三方插件,如vim-shell,允许你做那种事.
通常,如果我想在Vim和我的shell(Bash)之间切换,我只需按CTRL+ Z来暂停Vim进程,在我的shell中玩,然后当我想回到Vim时键入'fg' - 保持我的编辑器和我的贝壳很好,分开.
ptr*_*rin 133
我解决这个问题的方法是:
fg.Gre*_*ill 118
我肯定会推荐这样screen的东西.Vim是一个文本编辑器,而不是shell.
我会用Ctrl+AS水平分割当前窗口,或者在Ubuntu的屏幕和其他修补版本中,你可以使用Ctrl+A|(管道)垂直分割.然后使用Ctrl+ATab(或等效于某些系统,Ctrl+ACtrl+I可能更容易键入)在窗口之间切换.还有其他命令可以更改窗口的大小和排列.
或者不太高级的用途screen就是打开多个全屏窗口并在它们之间切换.这是我通常做的,我偶尔只使用分屏功能.
如果您不熟悉它的使用,GNU屏幕生存指南问题有很多好的提示.
Dan*_* S. 85
如果在您的Vim版本中启用,则可以使用该:term命令启动终端.
终端窗口支持已添加到Vim 8.这是一个可选功能,可以在使用+终端功能编译Vim时启用.如果您的Vim版本具有终端支持,:echo has('terminal')则输出"1".
输入:term将使您进入终端作业模式,您可以按预期使用终端.
在终端 - 作业模式下,按Ctrl-W N或Ctrl-\ Ctrl-N将模式切换到终端正常,这样可以移动光标,并且命令可以像Vim的正常模式一样运行.要切换回终端作业模式,请按i.
其他答案提到了Neovim中的类似功能.
tes*_*ter 84
:sh然后ctrl+d回来(bash)
更新:
你可以ctrl+d在vim中映射运行:sh,这允许你快速在bash和vim之间切换.
noremap <C-d> :sh<cr>
lah*_*ran 31
这个问题相当陈旧,但对于那些发现它的人来说,有一个新的可能的解决方案:Neovim包含一个完整的,一流的终端模拟器,它完全符合ConqueTerm所尝试的.简单地跑:term <your command here>.
<C-\><C-n>将退出术语模式回到正常模式.如果你喜欢我并且喜欢逃脱仍然退出术语模式,你可以将它添加到你的nvimrc:
tnoremap <ESC><ESC> <C-\><C-N>
Run Code Online (Sandbox Code Playgroud)
然后按ESC 两次将退出终端模式回到正常模式,这样你就可以操作仍在运行的命令写入的缓冲区.
虽然记住,因为当我发布这个答案时,nvim正在大力发展,可能会增加另一种退出终端模式的方法.由于Ctrl+\Ctrl+n几乎切换到普通模式的任何模式,我不认为这个答案会变成错的,但要注意,如果它不工作,这个答案可能是过时的.
https://github.com/neovim/neovim
fja*_*don 31
最终:terminal在2017年将一个本机命令添加到vim.
以下摘录自:终端自述文件:
此功能用于在Vim窗口中运行终端仿真程序.可以启动作业连接到终端仿真器.例如,要运行shell:
Run Code Online (Sandbox Code Playgroud):term bash或者运行build命令:
Run Code Online (Sandbox Code Playgroud):term make myprogram作业从Vim异步运行,窗口将更新以显示作业的输出,同时在另一个窗口中进行编辑.
Pab*_* C. 17
我知道我没有直接回答这个问题,但我认为这是一个很好的方法.没人提到tmux(或者至少不是一个独立的答案).Tmux是一种像屏幕一样的终端多路复用器.大多数东西可以在两个多路复用器中制作,但是afaik tmux更容易配置.此外,tmux现在比屏幕更加活跃,并且周围有相当大的生态系统,比如有助于配置的工具,ecc.
另外对于vim,还有另一个插件:ViMUX,它可以帮助很多工具之间的交互.您可以使用以下命令调用命
:call VimuxRunCommand("ls")
该命令在vim所在的当前窗格下方创建一个小的水平分割.
如果您不想运行整个命令,它还可以让您从提示符运行:
<Leader>vp :VimuxPromptCommand<CR>
由于没有实现,至少有6个'平台特定插件':
g:vroom_use_vimux这是一个很好的"用例":使用Vimux和Turbux与Spork和Guard进行测试
Sam*_*Sam 16
自 2017 年以来,可以在 vim 中使用终端打开一个新选项卡,正如 @fjardon 所说:
只需输入::terminal。默认情况下,它将在当前选项卡上方打开一个选项卡。
如果您希望它在其他地方打开,您可以尝试以下选项:
:below terminal:打开当前选项卡下方的终端。:below vertical terminal:始终向右垂直打开终端。您可以尝试这些,直到找到您喜欢的。之后,您可以在.vimrc配置文件中设置地图,对我来说,我使用:
nmap <leader>tt :below vertical terminal<CR>
Run Code Online (Sandbox Code Playgroud)
这样我就可以输入<space>tt(空格键)来快速打开它。
作为旁注:
ia干杯!
use*_*385 13
有人已经建议https://github.com/Shougo/vimshell.vim,但他们没有提到原因.因此,当我离开这个问题时,我浪费了很多其他时间尝试其他(排名更高)的选项.
Shougo/vimshell就是答案.原因如下:
除了作为终端仿真器之外,VimShell还允许您以正常和可视模式浏览终端输出.因此,如果您运行的命令导致您只想使用键盘复制和粘贴输出... VimShell涵盖了这一点.
没有提到的其他选项,包括NeoVim中的:terminal命令.Neovim's:终端接近,但截至2017年2月18日至少有以下方式:
将光标移动到缓冲区的末尾,而不是像VimShell那样将光标移动到同一位置.浪费大量时间.
不支持在Github上modifiable = 1看到关于这个的讨论,所以不能使用像vim-easymotion这样有用的插件.
不支持像Vimshell那样显示行号.
不要在其他选项上浪费时间,包括Neovim's:终端.使用VimShell.
Yos*_*n42 12
Vim 8.1的主要新功能是支持在Vim窗口中运行终端。
:term 将在Vim内的另一个窗口中打开终端。
你不能:
http://vimdoc.sourceforge.net/htmldoc/tips.html#shell-window
到目前为止,我已经尝试了这里提到的很多解决方案,我真正想要的是保持终端打开,同时在VsCode. 然后我发现了这个非常适合我的解决方案。
Nvim 0.5,但我认为它可以适用于任何版本,并且还检查过vimmyQuickTerminal.vim或任何您想要的名称创建一个脚本。"==============================================================================\n"\n" \xe2\x96\x92\xe2\x96\x88\xe2\x96\x80\xe2\x96\x80\xe2\x96\x88 \xe2\x96\x88\xe2\x96\x91\xe2\x96\x91\xe2\x96\x88 \xe2\x96\x91\xe2\x96\x80\xe2\x96\x91 \xe2\x96\x88\xe2\x96\x80\xe2\x96\x80 \xe2\x96\x88\xe2\x96\x91\xe2\x96\x88 \xe3\x80\x80 \xe2\x96\x80\xe2\x96\x80\xe2\x96\x88\xe2\x96\x80\xe2\x96\x80 \xe2\x96\x88\xe2\x96\x80\xe2\x96\x80 \xe2\x96\x88\xe2\x96\x80\xe2\x96\x80\xe2\x96\x88 \xe2\x96\x88\xe2\x96\x80\xe2\x96\x84\xe2\x96\x80\xe2\x96\x88 \xe2\x96\x91\xe2\x96\x80\xe2\x96\x91 \xe2\x96\x88\xe2\x96\x80\xe2\x96\x80\xe2\x96\x84 \xe2\x96\x88\xe2\x96\x80\xe2\x96\x80\xe2\x96\x88 \xe2\x96\x88\xe2\x96\x91\xe2\x96\x91\n" \xe2\x96\x92\xe2\x96\x88\xe2\x96\x91\xe2\x96\x92\xe2\x96\x88 \xe2\x96\x88\xe2\x96\x91\xe2\x96\x91\xe2\x96\x88 \xe2\x96\x80\xe2\x96\x88\xe2\x96\x80 \xe2\x96\x88\xe2\x96\x91\xe2\x96\x91 \xe2\x96\x88\xe2\x96\x80\xe2\x96\x84 \xe3\x80\x80 \xe2\x96\x91\xe2\x96\x92\xe2\x96\x88\xe2\x96\x91\xe2\x96\x91 \xe2\x96\x88\xe2\x96\x80\xe2\x96\x80 \xe2\x96\x88\xe2\x96\x84\xe2\x96\x84\xe2\x96\x80 \xe2\x96\x88\xe2\x96\x91\xe2\x96\x80\xe2\x96\x91\xe2\x96\x88 \xe2\x96\x80\xe2\x96\x88\xe2\x96\x80 \xe2\x96\x88\xe2\x96\x91\xe2\x96\x91\xe2\x96\x88 \xe2\x96\x88\xe2\x96\x84\xe2\x96\x84\xe2\x96\x88 \xe2\x96\x88\xe2\x96\x91\xe2\x96\x91\n" \xe2\x96\x91\xe2\x96\x80\xe2\x96\x80\xe2\x96\x88\xe2\x96\x84 \xe2\x96\x91\xe2\x96\x80\xe2\x96\x80\xe2\x96\x80 \xe2\x96\x80\xe2\x96\x80\xe2\x96\x80 \xe2\x96\x80\xe2\x96\x80\xe2\x96\x80 \xe2\x96\x80\xe2\x96\x91\xe2\x96\x80 \xe3\x80\x80 \xe2\x96\x91\xe2\x96\x92\xe2\x96\x88\xe2\x96\x91\xe2\x96\x91 \xe2\x96\x80\xe2\x96\x80\xe2\x96\x80 \xe2\x96\x80\xe2\x96\x91\xe2\x96\x80\xe2\x96\x80 \xe2\x96\x80\xe2\x96\x91\xe2\x96\x91\xe2\x96\x91\xe2\x96\x80 \xe2\x96\x80\xe2\x96\x80\xe2\x96\x80 \xe2\x96\x80\xe2\x96\x91\xe2\x96\x91\xe2\x96\x80 \xe2\x96\x80\xe2\x96\x91\xe2\x96\x91\xe2\x96\x80 \xe2\x96\x80\xe2\x96\x80\xe2\x96\x80\n"\n"==============================================================================\n" " This is a script that will trigger a terminal quickly than the FloatTerminal\n" open new split panes to right and below\n"link: https://betterprogramming.pub/setting-up-neovim-for-web-development-in-2020-d800de3efacd\n"==============================================================================\nset splitright\nset splitbelow\n" turn terminal to normal mode with escape\ntnoremap <Esc> <C-\\><C-n>\n" start terminal in insert mode\nau BufEnter * if &buftype == \'terminal\' | :startinsert | endif\n" open terminal on ctrl+n\nfunction! OpenTerminal()\n split term://zsh\n resize 10\nendfunction\nnnoremap <leader> n :call OpenTerminal()<CR>\n\nRun Code Online (Sandbox Code Playgroud)\n注意:如果您出于特定原因想要运行 bash 而不是 zsh,则替换zsh为bash.
让我们获取它,将其放入init.vimneovim 或 vim 的“.vimrc\”中
source $HOME/.config/nvim/modules/mySpecialScripts/myQuickTerminal.vim\nRun Code Online (Sandbox Code Playgroud)\n这将在您保存和资源化时提前预加载,您可以使用它source $MYVIMRC来快速重新加载 init.vim 文件。
正如您在脚本 n 中看到的那样,我进行了映射,以在新窗格中打开终端,我的是(空格键),一旦我单击(空格 + n),就会触发终端,我将喜欢在终端上编写代码被打开。
\n" Better window navigation\nnnoremap <C-h> <C-w>h\nnnoremap <C-j> <C-w>j\nnnoremap <C-k> <C-w>k\nnnoremap <C-l> <C-w>l\nRun Code Online (Sandbox Code Playgroud)\n如果您希望终端使用 key 退出当前缓冲区。您可以使用
\ntnoremap <Esc> <C-\\><C-n>:q!<CR>\nRun Code Online (Sandbox Code Playgroud)\n但因为我想在几个缓冲区之间切换,所以我在不关闭终端的情况下使用:
\ntnoremap <Leader><Esc> <C-\\><C-n>:q!<CR>\nRun Code Online (Sandbox Code Playgroud)\n| 归档时间: |
|
| 查看次数: |
257874 次 |
| 最近记录: |