Um único atalho em Lua que copia @file:line-range, para referenciar qualquer seleção no Claude Code igual ao Cmd+L do Cursor.
Uma coisa que senti muita falta quando migrei do Cursor para Neovim + Claude Code foi o atalho de contexto. No Cursor, Cmd+K abre um prompt inline com o arquivo atual já anexado. Cmd+L faz o mesmo para o chat. Você seleciona o código, aperta o atalho, e já está falando exatamente sobre aquele trecho.
O Claude Code não tem equivalente nativo para Neovim. Não há extensão de IDE, não há painel lateral — só um CLI rodando no terminal. Você fica por conta própria para criar essa conexão.
O que tentei primeiro
O conselho mais comum online é: rode o Claude Code num painel do tmux ao lado do Neovim, copie o texto com "+y, troque de painel, cole. Simples, sem configuração.
Funciona, mas o atrito vai acumulando. Você perde o contexto do intervalo de linhas. O Claude vê código solto sem nome de arquivo e sem localização. Se você está perguntando sobre uma função, quase sempre precisa dizer onde ela fica — e digitar isso manualmente toda hora cansa.
O conceito chave
O Claude Code entende a sintaxe @file:line-range. Se você colar @/absolute/path/to/file.lua:80-92 no prompt, o Claude busca exatamente aquelas linhas e as trata como contexto — da mesma forma que ao usar @ para anexar um arquivo pelo CLI.
O problema se resume a: fazer o Neovim copiar essa string automaticamente ao selecionar código.
O atalho
Dois atalhos compartilham o mesmo mnemônico (<leader>yp — yank path). No modo normal copia apenas o path do arquivo. No modo visual copia a referência completa @arquivo:linha-range (sim, tenho um comando só para copiar o absolute path — é muito útil!).
-- Modo normal: copia o caminho absoluto do arquivo
vim.keymap.set('n', '<leader>yp', function()
local path = vim.fn.expand'%:p'
vim.fn.setreg('+', path)
vim.notify('Copiado: ' .. path)
end, { desc ='[Y]ank file [p]ath' })
-- Modo visual: copia @file:line ou @file:line-range
end, { desc ='[Y]ank file [p]ath with line range' })
Alguns pontos importantes:
vim.fn.expand '%:p' expande o path do buffer atual para sua forma absoluta. Sem relative paths, sem ~ — o Claude Code precisa do caminho absoluto para encontrar o arquivo.
vim.fn.line 'v' retorna a linha onde a seleção visual começou, e vim.fn.line '.' retorna onde o cursor está agora. Quando você seleciona de baixo para cima, início > fim, então o swap normaliza a ordem.
Seleção de uma linha produz @/path/file:42, múltiplas linhas produzem @/path/file:42-50. Limpo.
vim.fn.setreg('+', ...) escreve diretamente no registro da área de transferência do sistema. Sem necessidade de "+y.
vim.notify exibe um popup de confirmação — útil para saber o que foi copiado antes de trocar de janela.
Como usar
Abra qualquer arquivo no Neovim.
Entre no modo visual (v, V, ou Ctrl+V) e selecione as linhas que quer referenciar.
Pressione <leader>yp. Uma notificação aparece mostrando a referência copiada.
Troque para o terminal do Claude Code e cole (Cmd+V ou clique do meio).
O texto fica assim:
@/Users/jcconnects/.dotfiles/nvim/init.lua:17-29
O Claude Code lê o arquivo nesse path, extrai as linhas 17–29 e as inclui como contexto para o seu prompt.
Prova de que funciona
Durante a implementação, testei na mesma hora colando uma referência crua no Claude Code, sem nenhum outro prompt:
@/Users/jcconnects/.dotfiles/nvim/init.lua:17-29
Resposta do Claude:
Sim, consigo ver. São as linhas 17–29 do seu init.lua:
O keymap está funcionando. Esse é o seu bloco de opções do editor.
Buscou exatamente aquelas linhas. Sem precisar copiar e colar o conteúdo do código.
O que isso substitui
O fluxo agora se aproxima do que o Cursor oferece:
Cursor
Neovim + Claude Code
Selecionar código, Cmd+K → prompt inline com contexto anexado
<leader>yp → trocar para Claude Code → colar referência + digitar prompt
Cmd+L → chat com arquivo anexado
<leader>yp → trocar para Claude Code → colar referência
Não é idêntico — você ainda troca de janela — mas o contexto é preciso e sem atrito depois que o atalho entra na memória muscular.
<leader>yp cobre 90% do fluxo de trabalho. Pouco mais de vinte linhas de Lua, sem plugins, sem dependências externas.
Conclusão
O Cmd+L do Cursor é conveniente porque elimina um passo mental: você não precisa dizer à IA onde está o código, ela já sabe. Esse é o truque — e dá para replicá-lo no Neovim com um único atalho e sem plugins.
A sintaxe @file:line-range é a conexão. Uma vez que você sabe que existe, só precisa copiar e colar o código no seu init.lua para começar a usar. Se você vive no Neovim e usa o Claude Code, vale os cinco minutos que leva para adicionar essa funcionalidade.
João Cordeiro é especialista em DevOps e SRE, apaixonado por criar conexões entre pessoas e tecnologia.