改变退出和打开vi(vim)编辑器的做法?

改变退出和打开vi(vim)编辑器的做法?,vim,Vim,vi(vim)和emacs之间的一个主要区别是emacs的设计和假设是在不退出的情况下运行,鉴于vim的快速加载时间,退出和启动编辑任务更容易。我读到这两个编辑用户之间的文化差异 我倾向于认为让编辑器一直运行,这有助于提高生产力,正如你所知,有些事情正在进行中,你不需要重新开始。您发现运行单个vim会话并从中执行所有任务的最佳技巧和插件是什么 例如,我编辑Python程序,然后退出运行appengine appcfg并返回。有时退出当前文件以打开另一个文件。如果我想编辑多个文件,我还没有习惯缓冲

vi(vim)和emacs之间的一个主要区别是emacs的设计和假设是在不退出的情况下运行,鉴于vim的快速加载时间,退出和启动编辑任务更容易。我读到这两个编辑用户之间的文化差异

我倾向于认为让编辑器一直运行,这有助于提高生产力,正如你所知,有些事情正在进行中,你不需要重新开始。您发现运行单个vim会话并从中执行所有任务的最佳技巧和插件是什么


例如,我编辑Python程序,然后退出运行appengine appcfg并返回。有时退出当前文件以打开另一个文件。如果我想编辑多个文件,我还没有习惯缓冲区和选项卡的概念,而是在屏幕会话中运行vim。

只要使用
在shell中运行stuff的命令。它与
:cd
%
扩展结合得很好

bash> vim path/to/ex.c
...
:cd %:h. " move to path/ex/
:!gcc -o %:r % && %:r " compile ex.c into ex and run it
如果要将命令的输出放入当前缓冲区,还可以将其与
:read
混合使用:

:read !ls " read in the names of all the files in the current directory

每个屏幕会话运行一个文件Vim?这听起来很糟糕。在Vim中轻松使用多个文件并不需要任何特殊插件。照办

:e /home/project/myfile.py
我在我的
.vimrc
中设置了
autochdir
,它会自动将当前工作目录更改为当前活动的任何缓冲区。所以一旦你打开了文件,你就可以

:e myfile2.py
:e myfile3.py
:ls
等等。顺便说一句,在Vim中打开任何文件都可以通过tab completion完成,因此请确保您正在这样做。一旦你打开了一堆缓冲区,在它们之间切换,我就这样做

:b myfile1.py
您也可以使用tab completion,因为您只需键入
:b 1
并点击tab,它就会发现您想要打开
myfile1.py
,因此,如果您能记住常规文件名,它会非常快,如果有多个类似的匹配项,它会为您提供一个列表,您可以通过tab进行搜索。为此,我还建议查看
wildmode
wildmenu
设置,看看您喜欢什么,它们将为您提供增强的选项卡完成菜单。如果在任何时候,你开始迷失什么缓冲区是开放的,你想看什么,你可以这样做

:e myfile2.py
:e myfile3.py
:ls
它会向你展示一切

还请记住,您可以通过在命令前面加上
,来运行外部命令

:!ls

比如说。希望其中的一些内容能帮助您,或者至少能让您找到正确的方向。

这里有一个好的视频教程,帮助您了解如何以及为什么使用单个Vim会话来管理所有编辑的工作流程:


您甚至可以使用:sh下拉到shell,然后使用shell中的exit返回到Vim。要在同一Vim中编辑多个文件,可以使用:vsplit filename或:split filename(用于垂直和水平拆分),然后使用Esc+Ctrl+w+箭头键在不同拆分之间导航。这样你就不需要标签了。如果您使用的是小代码块,则效果特别好。

其他人所说的一切加上三点:

  • 使用
    set hidden
    可以打开一个新的缓冲区来代替当前的缓冲区,即使它没有保存。您可以像那样打开几十个缓冲区,无需关闭Vim!请参阅
    :帮助窗口

  • 假设使用正确的标志(
    +clientserver
    )编译Vim,您可以让单个Vim作为“服务器”(在终端窗口a中)运行,并在该单个Vim中打开所有文件(从终端窗口B)。分两步完成:

  • $vim--servername启动vim
  • $vim--remote file.js
    打开文件
  • 您的文件在终端窗口A的Vim中打开,并且在终端窗口B中仍然有提示

  • 不要触摸标签。它们的名称非常错误,根本不像标签


如果我从控制台运行vim(我在linux上这样做是因为我专门使用ssh),那么我经常使用CTRL-z来挂起vim。然后做我的外壳材料和fg返回到vim

在vim中使用
ctags
非常有用--
帮助标签
了解更多信息

我使用了一个非常强大的perforce插件:。diff支持令人惊讶,因为您可以循环浏览所有打开的文件,或者查看文件历史记录以及两个旧版本之间的差异。尝试:PVDiff、:PFilelog和:popend

我为搜索和缓冲区窗口操作定义了很多宏。我这里列出了一些有趣的宏/函数,它们帮助我生活在vim中


剪贴板:

let mapleader=","
" put from clipboard
nmap ,p "*p
" yank to clipboard
nmap ,y "*y

标签:

“跳转到其他窗口中的标记
映射t:调用标记JumpOtherWindow()
函数!TagJumpOtherWindow()
设cw=展开(“”)
绞车p
执行“tjump”.cw
设@/=cw
法向z。
绞车p
端功能

划痕:

let mapleader=","
nmap ,x0 :e e:/work/scratch0.txt<CR>
nmap ,x1 :e e:/work/scratch1.txt<CR>
nmap ,x2 :e e:/work/scratch2.txt<CR>
nmap ,x3 :e e:/work/scratch3.txt<CR>
nmap ,x4 :e e:/work/scratch4.txt<CR>
nmap ,x5 :e e:/work/scratch5.txt<CR>
nmap ,x6 :e e:/work/scratch6.txt<CR>
nmap ,x7 :e e:/work/scratch7.txt<CR>
nmap ,x8 :e e:/work/scratch8.txt<CR>
nmap ,x9 :e e:/work/scratch9.txt<CR>
让mapleader=“,”
nmap,x0:e:/work/scratch0.txt
nmap,x1:ee:/work/scratch1.txt
nmap,x2:e:/work/scratch2.txt
nmap,x3:e:/work/scratch3.txt
nmap,x4:e:/work/scratch4.txt
nmap,x5:e:/work/scratch5.txt
nmap,x6:e:/work/scratch6.txt
nmap,x7:e:/work/scratch7.txt
nmap,x8:ee:/work/scratch8.txt
nmap,x9:ee:/work/scratch9.txt

IDE:

function!GetMsdevFile(行)
设mx='^\s*\([a-zA-Z\/\.0-9:\-]*\)'
let line=matchstr(a:line,mx)
让文件=替换(行,mx,'\1','')
让file=substitute(行“\\”、“/”、“”)
返回文件
端功能
函数!GetMsdevLineNumber(行)
设mx='^\s*\([a-zA-Z\/\.0-9:\-]*\)(\(\d\+\)'
let line=matchstr(a:line,mx)
让linenumber=替换(线,mx,'\2','')
返回行号
端功能
函数!GetMsdevFile2(行)
让file=expand(“%:p:h”).“/”.GetMsdevFile(a:line)
让文件
返回文件
端功能
函数!GetMsdevFile2(行)
让file=expand(“%:p:h”)。“/../”.GetMsdevFile(a:line)
让文件
R