Cmd+L do Cursor no Neovim

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
vim.keymap.set('v', '<leader>yp', function()
local path = vim.fn.expand '%:p'
local start_line = vim.fn.line 'v'
local end_line = vim.fn.line '.'
if start_line > end_line then
start_line, end_line = end_line, start_line
end
local ref = start_line == end_line
and string.format('@%s:%d', path, start_line)
or string.format('@%s:%d-%d', path, start_line, end_line)
vim.fn.setreg('+', ref)
vim.notify('Copiado: ' .. ref)
end, { desc = '[Y]ank file [p]ath with line range' })

Alguns pontos importantes:

Como usar

  1. Abra qualquer arquivo no Neovim.
  2. Entre no modo visual (v, V, ou Ctrl+V) e selecione as linhas que quer referenciar.
  3. Pressione <leader>yp. Uma notificação aparece mostrando a referência copiada.
  4. 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:

vim.o.signcolumn = 'yes'
vim.o.updatetime = 250
vim.o.timeoutlen = 300
vim.o.splitright = true
vim.o.splitbelow = true
vim.o.tabstop = 2
vim.o.shiftwidth = 2
vim.o.expandtab = true
vim.o.softtabstop = 2
vim.o.list = true
vim.opt.listchars = { tab = '» ', trail = '·', nbsp = '␣' }
vim.o.inccommand = 'split'
vim.o.cursorline = true

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:

CursorNeovim + 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.

← Todos os artigos