首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >vim,如何使用vanilla Vim快速切换文件(无插件)?

vim,如何使用vanilla Vim快速切换文件(无插件)?
EN

Stack Overflow用户
提问于 2018-04-19 02:03:27
回答 2查看 0关注 0票数 0

我知道限制自己到vanilla Vim(不使用插件)会限制编辑器的功能,但是当我经常在不同的机器之间切换时,在任何地方移动我的环境往往是太麻烦了。我想留在香草Vim。

阻碍我的东西是能够在文件之间快速切换。我(相信至少)有一个很好的理解缓冲区窗口标签,以及NETRW( ,VexEx等)。

但是在一个像Sublime Text这样的编辑器中,我只需键入ctrl- p然后立即在文件中。

我知道我可以下载到shell,但是我想知道是否还有其他“隐藏”的秘密可以在Vim中的文件之间进行快速切换,而不仅仅是文件名。

EN

回答 2

Stack Overflow用户

发布于 2018-04-19 10:07:01

与ST2's Ctrl+ 最接近的等效(“最接近”,而不是“确切”)P是一个名为“准备就绪...”的插件。还有其他类似的插件,如Command-TFuzzyFinder

我使用CtrlP,我喜欢它,但是我全心全意地支持你的决定去“无插件”。这并不是最简单的方法,但长远来看,这将会带来回报。

打开文件

打开文件的最基本的方法是:e /path/to/filename。值得庆幸的是,你会得到tab-completion和wildcards:经典*和特殊的**,它代表“任何子目录”。

综合所有这些,你可以做到:

:e **/*foo<Tab>

foo工作目录下所有包含其名称的文件中进行选择或:

:e **/*foo/*bar<Tab>

bar从其名称中包含的所有包含其名称的文件中选择foo工作目录下的任何位置。

当然,工程:tabe[dit]:sp[lit]:vs[plit]也。

不过,这些命令仅限于一个文件。使用:next打开多个文件:

:next **/*.js

并看看: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

请注意,许多这些命令及其亲属都接受一个计数。

:ls命令显示加载的缓冲区列表。但是,这有点“特殊”:当创建缓冲区时会为其分配一个数字,这样您可以拥有一个看起来像1 2 5删除缓冲区的列表。这有点尴尬,是的,这使得切换到缓冲区的数量有点太麻烦。喜欢通过部分名称:b foo<Tab>或循环切换:bn :bp

无论如何,这里是一个很酷的映射,它列出了所有加载的缓冲区并为您填充提示符,等待您键入缓冲区的编号并按下<enter>

nnoremap gb :ls<CR>:b<Space>

有了这个映射,切换到另一个缓冲区就像下面这样简单:

gb
(quickly scanning the list)
3<CR>

要么:

gb
(quickly scanning the list)
foo<tab><CR>

这个想法来自Bairui收集的Vim图表中的这张图片:

飞与骑自行车
飞与骑自行车

Vim也有<C-^>(或<C-6>在某些键盘上) - 正常模式等效于:b#- 在当前缓冲区和前一个缓冲区之间跳转。如果经常在两个缓冲区之间切换,请使用它。

阅读所有关于缓冲区:help buffers

去声明

在一个文件中,你可以使用gdgD

在一个项目中,Vim的“标签”功能是你的朋友,但你需要一个外部代码索引器,如ctags或cscope。最基本的命令:tag foo,并<C-]>把光标放在一个方法名。这两个工具都很好地融入Vim的:见:help tags:help ctags:help cscope

对于它的价值,我广泛地使用标签导航来移动项目(主要使用CtrlP :CtrlPTag:CtrlPBufTag命令,但也包括嵌入式),我最喜欢的“通用”缓冲切换方法是名称。

部署你的配置

许多Vim用户将他们的配置置于版本控制之下,这使得在新机器上安装自己的配置变得非常快速和容易。想想看。

几个月前,我不得不使用过时Vim的远程机器。我可以安装一个合适的Vim并克隆我自己喜欢的配置,但这次我决定为了“磨锯”而行驶。我很快建立了一个极简主义.vimrc,并重访了几个半被遗忘的原生特征。在那次演出之后,我决定不需要CtrlP,并且摆脱它:原生特征和自定义映射并不像性感,但他们完成了没有太多依赖的工作。

与文件杂耍

set path=.,**
nnoremap <leader>f :find *
nnoremap <leader>s :sfind *
nnoremap <leader>v :vert sfind *
nnoremap <leader>t :tabfind *

: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>

警告!该path选项非常强大。上面的值.,**- 对我而言,但我使用的语言没有标准库。在正确的价值完全取决于你的需求。

玩弄缓冲区

set wildcharm=<C-z>
nnoremap <leader>b :buffer <C-z><S-Tab>
nnoremap <leader>B :sbuffer <C-z><S-Tab>

上面的映射列出了“wildmenu”中的可用缓冲区,并提示了一个空的提示,允许我使用<Tab>或键入几个字母来浏览菜单,并<Tab>再次缩小列表的范围。就像上面的文件映射一样,这个过程很快并且几乎没有摩擦。

nnoremap <PageUp>   :bprevious<CR>
nnoremap <PageDown> :bnext<CR>

这些映射说明了一切。

用标签玩杂耍

nnoremap <leader>j :tjump /

这种映射使用正则表达式搜索,而不是整词搜索,所以我可以做,jba<Tab>标签foobarbaz()

是的,模糊匹配是令人上瘾的,但是如果没有它,你也可以同样高效。而成本的一小部分。

更多编辑

一些额外的提示/技巧...

Wildmenu选项

启用的“wildmenu” set wildmenu使文件/缓冲区导航更容易。它的行为受到一系列值得研究的选项的支配:

wildmode 告诉Vim你希望“野菜”的表现如何:

set wildmode=list:full

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

文件标记

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缓冲区。真棒。

票数 0
EN

Stack Overflow用户

发布于 2018-04-19 11:28:03

答案很大程度上取决于你的喜好和情况。一些例子:

  • 如果主要是两个文件(例如C头文件和实现文件),<C-^>非常方便。一般来说,备用文件是一个重要的概念。
  • 如果你使用一个大的编辑器窗口,那么窗口:split就会导致定位窗口的问题(一旦你打开了所有的缓冲区)。可以使用它[N]<C-w><C-w>来快速切换到它。
  • 如果你能记住(几)缓冲数字,:[N]b[uffer]:[N]sb[uffer]命令是很方便; :ls告诉你数字。

插件(或者至少是自定义映射)可以改善很多事情,vim.org上的这个主题有很多种。有各种机制来分发你的配置(Pathogen + GitHub,Dropbox,...),或者你可以通过Vim附带的netrw插件远程编辑服务器文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100008186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档