我知道限制自己使用vanilla Vim(不使用插件)限制了编辑器的功能,但是当我经常在不同的机器之间切换时,在任何地方移动我的环境通常都是太麻烦了.我想留在香草Vim.
阻碍我的是能够在文件之间快速切换的能力.我(相信至少)有一个很好的理解缓冲区,窗口,标签,以及NETRW( ,Vex,Ex等).
但是在像Sublime Text这样的编辑器中,我可以输入ctrl- p而且我立刻就在文件中.
我知道我可以下载到shell,但我想知道是否有任何其他"隐藏"的秘密可以在Vim中的文件之间快速切换,而不仅仅是文件名.
rom*_*inl 220
与ST2 Ctrl+ 最接近的等价物("最接近",而非"精确")P是一个名为的插件,准备就绪...... CtrlP.还有其他类似的插件,如Command-T或FuzzyFinder.
我使用CtrlP而且我喜欢它,但我全心全意地支持你决定"免插件".这不是最简单的方法,但从长远来看它会得到回报.
打开文件
打开文件的最基本方法是:e /path/to/filename.值得庆幸的是,你获得了tab-completion和通配符:经典*和特殊的**,代表"任何子目录".
结合所有这些,您可以:
:e **/*foo<Tab>
Run Code Online (Sandbox Code Playgroud)
从foo工作目录下的名称中包含的所有文件中选择或:
:e **/*foo/*bar<Tab>
Run Code Online (Sandbox Code Playgroud)
从工作目录下的任何位置选择包含bar在其名称下的任何子目录下的所有文件foo.
当然,这也适用于:tabe[dit],:sp[lit]也是:vs[plit]如此.
但是,这些命令仅限于一个文件.使用:next打开多个文件:
:next **/*.js
Run Code Online (Sandbox Code Playgroud)
并看一看:help arglist.
在缓冲区之间跳转
:b[uffer] 是基本的缓冲区切换命令:
:b4 " switch to buffer number 4
:bn " switch to next buffer in the buffer list
:bp " switch to previous buffer in the buffer list
:bf " switch to first buffer in the buffer list
:bl " switch to last buffer in the buffer list
:b foo<Tab> " switch by buffer name with tab-completion
:b# " switch to the alternate file
Run Code Online (Sandbox Code Playgroud)
请注意,其中许多命令及其亲属都接受计数.
该:ls命令显示已加载缓冲区的列表.但它有点"特殊":缓冲区在创建时会被赋予一个数字,因此您可以拥有一个类似于1 2 5删除缓冲区的列表.这有点尴尬,是的,这使得切换到缓冲区的数量有点太麻烦了.喜欢通过部分名称:b foo<Tab>或循环来切换:bn :bp.
无论如何,这是一个很酷的映射,它列出了所有已加载的缓冲区并为您填充提示,等待您键入缓冲区的编号并按<enter>:
nnoremap gb :ls<CR>:b<Space>
Run Code Online (Sandbox Code Playgroud)
通过此映射,切换到另一个缓冲区非常简单:
gb
(quickly scanning the list)
3<CR>
Run Code Online (Sandbox Code Playgroud)
要么:
gb
(quickly scanning the list)
foo<tab><CR>
Run Code Online (Sandbox Code Playgroud)
这个想法来自于Bairui收集的Vim信息图表中的这张图片:

Vim也有<C-^>(或<C-6>在某些键盘上) - 正常模式相当于:b#- 在当前缓冲区和前一个缓冲区之间跳转.如果您经常在两个缓冲区之间交替使用它.
阅读所有缓冲区:help buffers.
去宣言
在文件中,您可以使用gd或gD.
在一个项目中,Vim的"标签"功能是你的朋友,但你需要一个外部代码索引器,如ctags或cscope.最基本的命令:tag foo,并<C-]>把光标放在一个方法名.这两个工具都很好地集成到Vim中:see :help tags,:help ctagsand :help cscope.
对于它的价值,我广泛使用标签导航在一个项目中移动(主要使用CtrlP :CtrlPTag和:CtrlPBufTag命令,但也包括buit-in)和我最喜欢的"通用"缓冲切换方法是名称.
部署配置
许多Vim用户将其配置置于版本控制之下,这使得在新机器上安装自己的配置变得非常快速和容易.想一想.
编辑
几个月前,我不得不在一台带有过时Vim的远程机器上工作.我本来可以安装一个合适的Vim并克隆了我自己心爱的配置,但这次我决定轻装上阵,以"磨刀".我很快建立了一个极简主义者,.vimrc并重新审视了几个被遗忘的原生特征.在那次演出之后,我认为CtrlP并不是必需的并且摆脱了它:原生特征和自定义映射不是那么性感但是它们在没有太多依赖性的情况下完成工作.
杂耍文件
set path=.,**
nnoremap <leader>f :find *
nnoremap <leader>s :sfind *
nnoremap <leader>v :vert sfind *
nnoremap <leader>t :tabfind *
Run Code Online (Sandbox Code Playgroud)
:find一旦你set path正确的话,这是一个真正伟大的命令.使用我的设置,,ffoo<Tab>将foo递归地找到包含在当前目录下的所有文件.它快速,直观且轻巧.当然,我:edit和朋友一样可以获得相同的完成和通配符.
为了使过程更快,以下映射允许我跳过项目的整个部分并在当前文件的目录下递归查找文件:
nnoremap <leader>F :find <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>S :sfind <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>V :vert sfind <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>T :tabfind <C-R>=expand('%:h').'/*'<CR>
Run Code Online (Sandbox Code Playgroud)
警告!该path选项非常强大.上面的值 - .,**工作对我来说,但我使用的语言没有标准库.在正确的价值完全取决于你的需求.
玩弄缓冲区
set wildcharm=<C-z>
nnoremap <leader>b :buffer <C-z><S-Tab>
nnoremap <leader>B :sbuffer <C-z><S-Tab>
Run Code Online (Sandbox Code Playgroud)
上面的映射列出了"wildmenu"中带有空提示的可用缓冲区,允许我使用<Tab>或键入几个字母来导航菜单,然后<Tab>再次缩小列表范围.与上面的文件映射一样,该过程快速且几乎无摩擦.
nnoremap <PageUp> :bprevious<CR>
nnoremap <PageDown> :bnext<CR>
Run Code Online (Sandbox Code Playgroud)
那些映射说明了一切.
杂耍标签
nnoremap <leader>j :tjump /
Run Code Online (Sandbox Code Playgroud)
此映射使用正则表达式搜索而不是全字搜索,因此我可以,jba<Tab>查找标记foobarbaz().
是的,模糊匹配令人上瘾,但如果没有它,你就可以提高效率.而且只需花费一小部分费用.
更多编辑
一些额外的提示/技巧......
Wildmenu选项
启用的"wildmenu" set wildmenu使文件/缓冲区导航更容易.它的行为受到一系列值得研究的选项的支配:
wildmode 告诉Vim你希望"wildmenu"表现如何:
set wildmode=list:full
Run Code Online (Sandbox Code Playgroud)
wildignore 过滤掉所有的东西:
set wildignore=*.swp,*.bak
set wildignore+=*.pyc,*.class,*.sln,*.Master,*.csproj,*.csproj.user,*.cache,*.dll,*.pdb,*.min.*
set wildignore+=*/.git/**/*,*/.hg/**/*,*/.svn/**/*
set wildignore+=tags
set wildignore+=*.tar.*
Run Code Online (Sandbox Code Playgroud)
wildignorecase允许您搜索foo和查找Foo:
set wildignorecase
Run Code Online (Sandbox Code Playgroud)
文件标记
augroup VIMRC
autocmd!
autocmd BufLeave *.css normal! mC
autocmd BufLeave *.html normal! mH
autocmd BufLeave *.js normal! mJ
autocmd BufLeave *.php normal! mP
augroup END
Run Code Online (Sandbox Code Playgroud)
我最近在别人身上找到了这个宝石~/.vimrc.无论何时离开缓冲区,它都会在光标的确切位置创建一个文件标记,以便无论您身在何处,都会'J跳转到您编辑的最新JavaScript缓冲区.真棒.
答案很大程度上取决于您的偏好和情况.一些例子:
<C-^>非常方便.通常,备用文件是一个重要的概念.:split转动定位缓冲区的问题,无法找到窗口(一旦你打开了所有的缓冲区).您可以使用[N]<C-w><C-w>它快速切换到它.:[N]b[uffer]和:[N]sb[uffer]命令非常方便; :ls告诉你数字.插件(或至少是自定义映射)可以改进很多东西,在vim.org上有关于这个主题的各种各样的东西.有各种机制来分发您的配置(Pathogen + GitHub,Dropbox,...),或者您可以通过Vim附带的netrw插件远程编辑服务器文件.
有时,按顺序浏览文件列表也很方便(例如,如果你做了类似的话vim *.php,一次打开几个文件).然后你可以使用:n[ext](以及:prev[ious],:fir[st]和:la[st])导航(除了什么在其他答案建议).
| 归档时间: |
|
| 查看次数: |
29645 次 |
| 最近记录: |