O equivalente mais próximo ("mais próximo", não "exato") do ST2 Ctrl+ Pé um plugin chamado, prepare-se ... CtrlP . Existem outros plug - ins semelhantes, como Command-T ou FuzzyFinder .
Eu uso o CtrlP e adoro isso, mas apoio de todo o coração sua decisão de ir "sem plugins". Não é a maneira mais fácil de fazer, mas vai render no longo prazo.
Abrindo arquivos
A maneira mais básica de abrir um arquivo é :e /path/to/filename
. Felizmente, você obtém preenchimento de tabulação e curingas: o clássico *
e um especial **
, que significa "qualquer subdiretório".
Combinando tudo isso, você pode fazer:
:e **/*foo<Tab>
para escolher entre todos os arquivos que contêm foo
em seu nome no diretório de trabalho ou:
:e **/*foo/*bar<Tab>
para escolher entre todos os arquivos que contêm bar
em seu nome em qualquer subdiretório que contenha foo
em seu nome, em qualquer lugar no diretório de trabalho.
Claro, que trabalha para :tabe[dit]
, :sp[lit]
e :vs[plit]
também.
Esses comandos são limitados a um arquivo, no entanto. Use :next
para abrir vários arquivos:
:next **/*.js
e dê uma olhada em :help arglist
.
Saltando entre buffers
:b[uffer]
é o comando básico de troca de buffer:
: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
Observe que muitos desses comandos e seus parentes aceitam uma contagem.
O :ls
comando mostra uma lista de buffers carregados. No entanto, é um pouco "especial": os buffers recebem um número quando são criados, de modo que você pode ter uma lista semelhante à de 1 2 5
excluir os buffers. Isso é um pouco estranho, sim, e torna a troca para um buffer por seu número um pouco problemática. Prefira alternar por nome parcial :b foo<Tab>
ou por ciclo :bn :bp
.
De qualquer forma, aqui está um mapeamento legal que lista todos os buffers carregados e preenche o prompt para você, esperando que você digite o número de um buffer e pressione <enter>
:
nnoremap gb :ls<CR>:b<Space>
Com esse mapeamento, mudar para outro buffer é tão simples como:
gb
(quickly scanning the list)
3<CR>
ou:
gb
(quickly scanning the list)
foo<tab><CR>
A ideia surge desta imagem retirada da coleção de infográficos do Vim de Bairui :
O Vim também tem <C-^>
(ou <C-6>
em alguns teclados) —o modo normal equivalente a :b#
—para saltar entre o buffer atual e o anterior. Use-o se você costuma alternar entre dois buffers.
Leia tudo sobre buffers em :help buffers
.
Vá para a declaração
Em um arquivo, você pode usar gd
ou gD
.
Dentro de um projeto, o recurso de "tags" do Vim é seu amigo, mas você precisará de um indexador de código externo como ctags ou cscope. Os comandos mais básicos são :tag foo
e <C-]>
com o cursor no nome de um método. Ambas as ferramentas estão bem integradas ao Vim: veja :help tags
, :help ctags
e :help cscope
.
Pelo que vale a pena, eu uso a navegação por tag extensivamente para mover dentro de um projeto (usando CtrlP :CtrlPTag
e :CtrlPBufTag
comandos, principalmente, mas os embutidos também) e meu método de troca de buffer "genérico" favorito é pelo nome.
Implantar sua configuração
Muitos usuários do Vim colocam sua configuração sob controle de versão, o que torna muito rápido e fácil instalar sua própria configuração em uma nova máquina. Pense nisso.
EDITAR
Há alguns meses, tive que trabalhar em uma máquina remota com um Vim desatualizado. Eu poderia ter instalado um Vim adequado e clonado minha própria configuração, mas decidi viajar com pouca bagagem, dessa vez, para "afiar a serra". Rapidamente construí um minimalista .vimrc
e revisitei alguns recursos nativos meio esquecidos. Depois desse show, decidi que o CtrlP não era tão necessário e me livrei dele: recursos nativos e mapeamentos personalizados não são tão atraentes, mas realizam o trabalho sem muitas dependências.
Malabarismo com arquivos
set path=.,**
nnoremap <leader>f :find *
nnoremap <leader>s :sfind *
nnoremap <leader>v :vert sfind *
nnoremap <leader>t :tabfind *
:find
é um comando verdadeiramente grande assim que você set path
corretamente. Com minhas configurações, ,ffoo<Tab>
irá encontrar todos os arquivos contidos foo
no diretório atual, recursivamente. É rápido, intuitivo e leve. Claro, eu me beneficio da mesma conclusão e curingas que com :edit
e amigos.
Para tornar o processo ainda mais rápido, os mapeamentos a seguir me permitem pular partes inteiras do projeto e encontrar arquivos recursivamente no diretório do arquivo atual:
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>
AVISO! A path
opção é extremamente poderosa. O valor acima— .,**
—funciona para mim, mas os idiomas que uso não têm uma biblioteca padrão. O valor adequado depende inteiramente de suas necessidades.
Malabarismo com buffers
set wildcharm=<C-z>
nnoremap <leader>b :buffer <C-z><S-Tab>
nnoremap <leader>B :sbuffer <C-z><S-Tab>
Os mapeamentos acima listam os buffers disponíveis no "menu selvagem" com um prompt vazio, permitindo-me navegar no menu com <Tab>
ou digitar algumas letras e <Tab>
novamente para restringir a lista. Como com os mapeamentos de arquivo acima, o processo é rápido e quase sem atrito.
nnoremap <PageUp> :bprevious<CR>
nnoremap <PageDown> :bnext<CR>
Esses mapeamentos falam por si.
Malabarismo com tags
nnoremap <leader>j :tjump /
Este mapeamento usa pesquisa regex em vez de pesquisa de palavra inteira para que eu possa fazer ,jba<Tab>
para encontrar a tag foobarbaz()
.
Sim, a correspondência difusa é viciante, mas você pode ser igualmente produtivo sem ela. E por uma fração do custo.
MAIS EDITAR
Algumas dicas / truques adicionais ...
Opções de menu selvagem
O "wildmenu", ativado com set wildmenu
, torna a navegação de arquivo / buffer mais fácil. Seu comportamento é regido por uma série de opções que valem a pena investigar:
wildmode
diz ao Vim como você deseja que o "menu selvagem" se comporte:
set wildmode=list:full
wildignore
filtra todo o lixo:
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
permite que você pesquise foo
e encontre Foo
:
set wildignorecase
Marcas de arquivo
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
Recentemente, encontrei esta joia na de outra pessoa ~/.vimrc
. Ele cria uma marca de arquivo na posição exata do cursor sempre que você sai de um buffer, de forma que, onde quer que você esteja, 'J
pule para o buffer JavaScript mais recente que você editou. Impressionante.