vim,使用vanilla vim在文件之间快速切换(无插件)
我知道将自己限制在vanillavim(不使用插件)会限制编辑器的功能,但由于我经常在不同的机器之间切换,因此在任何地方移动我的环境通常都太麻烦了。我只想呆在香草维姆 阻碍我前进的是在文件之间快速切换的能力。 我(至少相信)对缓冲区、窗口、选项卡以及netrw(vim,使用vanilla vim在文件之间快速切换(无插件),vim,Vim,我知道将自己限制在vanillavim(不使用插件)会限制编辑器的功能,但由于我经常在不同的机器之间切换,因此在任何地方移动我的环境通常都太麻烦了。我只想呆在香草维姆 阻碍我前进的是在文件之间快速切换的能力。 我(至少相信)对缓冲区、窗口、选项卡以及netrw(Vex、Ex等)有很好的理解 但在诸如的编辑器中,我只需键入ctrl-p,就可以立即看到文件 我知道我可以直接使用shell,但我想知道,除了文件名之外,在Vim中快速切换文件是否还有其他“隐藏”秘密。答案在很大程度上取决于您的偏好和环境
Vex
、Ex
等)有很好的理解
但在诸如的编辑器中,我只需键入ctrl-p,就可以立即看到文件
我知道我可以直接使用shell,但我想知道,除了文件名之外,在Vim中快速切换文件是否还有其他“隐藏”秘密。答案在很大程度上取决于您的偏好和环境。一些例子:
- 如果主要是两个文件(例如C头文件和实现文件),
非常方便。通常,备用文件是一个重要的概念 - 如果使用较大的编辑器窗口,window
s将查找缓冲区的问题从查找窗口(打开所有缓冲区后)转到查找缓冲区的问题。您可以使用:split
快速切换到它[N]
- 如果你能记住(几个)缓冲区号码,那么
和:[N]b[uffer]
命令就非常方便<代码>:ls告诉您数字:[N]sb[uffer]
插件(或者至少是自定义映射)可以大大改进,在这个主题上有各种各样的内容。有多种机制可以分发配置文件(病原体+GitHub、Dropbox等),或者您可以通过Vim附带的netrw插件远程编辑服务器文件。如果您使用的是文件名并希望跳转到该文件,将为您执行此操作。我也喜欢使用,这不是一个插件;您只需构建标记,就可以轻松地绕过代码库 与ST2的Ctrl+p最接近的等价物(“最近的”,而不是“精确的”)是一个名为“准备就绪”的插件。还有其他类似的插件,如或 我使用CtrlP,我喜欢它,但我全心全意地支持你的决定去“插件免费”。这不是最简单的方法,但从长远来看会有回报的
打开文件
set path=.,**
nnoremap <leader>f :find *
nnoremap <leader>s :sfind *
nnoremap <leader>v :vert sfind *
nnoremap <leader>t :tabfind *
set wildcharm=<C-z>
nnoremap <leader>b :buffer <C-z><S-Tab>
nnoremap <leader>B :sbuffer <C-z><S-Tab>
nnoremap <leader>j :tjump /
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
打开文件最基本的方法是:e/path/to/filename
。谢天谢地,您得到了制表符补全和通配符:经典的*
和一个特殊的**
,它代表“任意子目录”
结合所有这些,您可以做到:
:e **/*foo<Tab>
从工作目录下任何名称中包含foo
的子目录下名称中包含bar
的所有文件中进行选择
当然,这也适用于:tabe[dit]
、:sp[lit]
和:vs[plit]
但是,这些命令仅限于一个文件。使用:next
打开多个文件:
:next **/*.js
并查看:帮助参数列表
在缓冲区之间跳跃
set path=.,**
nnoremap <leader>f :find *
nnoremap <leader>s :sfind *
nnoremap <leader>v :vert sfind *
nnoremap <leader>t :tabfind *
set wildcharm=<C-z>
nnoremap <leader>b :buffer <C-z><S-Tab>
nnoremap <leader>B :sbuffer <C-z><S-Tab>
nnoremap <leader>j :tjump /
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
: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
通过此映射,切换到另一个缓冲区非常简单:
gb
(quickly scanning the list)
3<CR>
:只要正确设置路径,find
就是一个非常棒的命令。通过我的设置,,ffoo
将递归地找到当前目录下包含foo
的所有文件。它快速、直观、轻便。当然,我受益于与:edit
和friends相同的补全和通配符
为了使过程更快,以下映射允许我跳过项目的整个部分,并在当前文件的目录下递归查找文件:
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>
上面的映射列出了“wildmenu”中的可用缓冲区,并有一个空提示,允许我使用
导航菜单,或者键入几个字母,然后再次键入
以缩小列表范围。与上面的文件映射一样,这个过程很快,几乎没有摩擦
nnoremap <PageUp> :bprevious<CR>
nnoremap <PageDown> :bnext<CR>
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.*
wildignorecase
允许您搜索foo
并查找foo
:
set wildignorecase
文件标记
set path=.,**
nnoremap <leader>f :find *
nnoremap <leader>s :sfind *
nnoremap <leader>v :vert sfind *
nnoremap <leader>t :tabfind *
set wildcharm=<C-z>
nnoremap <leader>b :buffer <C-z><S-Tab>
nnoremap <leader>B :sbuffer <C-z><S-Tab>
nnoremap <leader>j :tjump /
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
我最近在别人的
~/.vimrc
中发现了这个宝石。每当您离开缓冲区时,它都会在光标的确切位置创建一个文件标记,这样无论您在哪里,'J
都会跳到您编辑的最新JavaScript缓冲区。棒极了。您可以在命令行上完成通配符选项卡,而无需任何插件。e、 g
:e src/**/foo*<tab>
在my.vimrc.中,有时按顺序浏览文件列表也很方便(例如,如果您执行类似于
vim*.php
的操作,一次打开多个文件)。然后您可以使用:n[ext]
(以及:prev[ious]
、:fir[st]
和:la[st]
)进行导航(除了其他答案中建议的内容)。如果您想在vim编辑器中切换文件,请参阅下面的答案
首先按Esc键退出编辑模式
然后键入:e
检查当前文件路径
如果要转到另一个文件,请键入:e/path of file.txt/
,使用此选项可以切换
如果要转到上一个文件,只需键入切换到上一个文件路径的
:e 35;
。我对Vim也有同样的问题
我最不想做的事情就是依靠插件完成像文件交换这样平凡的任务
我将以下行添加到.vimrc
set path+=**
set wildmenu
砰!现在我可以:只要vim位于项目的根目录中,就可以在/any/folder/
中找到any/filename/in选项卡完成工作。通配符有效强>
一旦文件已经打开,并且后台有大量缓冲区(您可以使用:ls
查看所有缓冲区),运行:b any/file