CARVIEW |
Select Language
HTTP/2 200
date: Wed, 23 Jul 2025 22:13:44 GMT
content-type: text/html; charset=utf-8
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
x-robots-tag: none
etag: W/"86e341503f587e399b12fd53a93d70b7"
cache-control: max-age=0, private, must-revalidate
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: no-referrer-when-downgrade
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
content-encoding: gzip
accept-ranges: bytes
set-cookie: _gh_sess=5hAhuImdhyzbXBaO%2FHtKUTbzzDByucOXIUzwrmTwANd1lNzkCnPhw1R4dbT%2F2z7aH8zgflQCvHOhJ0tQMV9DxHCiRsqcUss54OMTUEdyk8WMWlQHiP52WWG9kT2%2F5p902QzZS7OPPTPdv2DM%2FBrsl9vzyDG740hUhyuriazj7SNraEtFTf7J4fvRXVBJmrwxczUnCr%2F5YdwelR3Nhp%2FVjtPnmPnfQQeYiwGrUd6j3CteqlsBpnbBRwQ1w%2FwPtyXUNoSHaxXOtxDj%2Fh%2FtEybIbg%3D%3D--9STeM4M%2Feqa%2FgTTv--wWFSJVIfwOMYfB6Ak9fg9w%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.1522668772.1753308824; Path=/; Domain=github.com; Expires=Thu, 23 Jul 2026 22:13:44 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Thu, 23 Jul 2026 22:13:44 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: C296:36F97A:1126BCD:147E5CA:68815E98
Home · R-nvim/cmp-r Wiki · GitHub
Skip to content
Navigation Menu
{{ message }}
-
Notifications
You must be signed in to change notification settings - Fork 1
Home
Jakson Alves de Aquino edited this page Jul 18, 2025
·
2 revisions
Of course, you can configure nvim-cmp
according to your preferences. This is the reason for having configuration options, and nvim-cmp
has a lot of them. This freedom has a cost: the configuration isn't simple. Below is an example of a complete configuration of nvim-cmp
+ cmp-r
. If you already have nvim-cmp
configured, the tips in the cmp-r
README should be sufficient for you, and you won't need this example. However, if you have not configured your nvim-cmp
yet, you can use the code below as a first draft or copy the relevant parts to another first draft that you have found somewhere else. In the example, cmp.lua
is in a plugins
directory sourced by lazy.nvim
:
cmp.lua
:
return {
-- Snippet Engine written in Lua
{
'L3MON4D3/LuaSnip',
dependencies = {
-- Preconfigured snippets for different languages
'rafamadriz/friendly-snippets',
config = function()
require('luasnip.loaders.from_vscode').lazy_load()
require('luasnip.loaders.from_lua').load({ paths = { './snippets' } })
end,
},
keys = {
{ '<C-l>', function() require('luasnip').expand_or_jump() end, mode = { 'i', 's' } },
},
opts = {
history = true,
delete_check_events = 'TextChanged',
ft_func = function()
-- return vim.split(vim.bo.filetype, '.', { plain = true })
if vim.bo.filetype == "lua" then
return { "lua" }
else
return { }
end
end,
},
config = function(_, opts)
require('luasnip').setup(opts)
vim.api.nvim_create_user_command('LuaSnipEdit', function()
require('luasnip.loaders').edit_snippet_files()
end, {})
end,
},
-----------------------------------------------------------------------------
-- Completion plugin for Neovim written in Lua
{
'hrsh7th/nvim-cmp',
version = false, -- last release is way too old
event = 'InsertEnter',
dependencies = {
-- nvim-cmp source for neovim builtin LSP client
'hrsh7th/cmp-nvim-lsp',
-- nvim-cmp source for buffer words
'hrsh7th/cmp-buffer',
'hrsh7th/cmp-cmdline',
-- nvim-cmp source for path
'hrsh7th/cmp-path',
-- Luasnip completion source for nvim-cmp
'saadparwaiz1/cmp_luasnip',
-- Completion using R.nvim as backend
"R-nvim/cmp-r",
},
opts = function()
local cmp = require('cmp')
-- local defaults = require('cmp.config.default')()
local luasnip = require('luasnip')
local function has_words_before()
if vim.bo.buftype == 'prompt' then
return false
end
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match('%s') == nil
end
local kind_icons = {
Text = "",
Method = "",
Function = "",
Constructor = "",
Field = "",
Variable = "α",
Class = "",
Interface = "",
Module = "",
Property = "",
Unit = "",
Value = "",
Enum = "",
Keyword = "",
Snippet = "",
Color = "",
File = "",
Reference = "",
Folder = "",
EnumMember = "",
Constant = "",
Struct = "",
Event = "",
Operator = "",
TypeParameter = "",
}
return {
-- sorting = defaults.sorting,
sorting = {
comparators = {
-- This function seems to work well
cmp.config.compare.order,
},
},
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
sources = cmp.config.sources({
-- { name = 'cmp_zotcite' },
{ name = 'cmp_r' },
{ name = 'otter' },
{ name = 'nvim_lsp', priority = 50 },
{ name = 'path', priority = 40 },
{ name = 'luasnip', priority = 30 },
}),
formatting = {
fields = {'abbr', 'kind', 'menu'},
format = function(entry, vim_item)
-- Kind icons
vim_item.kind = string.format('%s', kind_icons[vim_item.kind])
-- Source
vim_item.menu = ({
latex_symbols = "",
otter = "o",
nvim_lsp = '',
nvim_lua = 'L',
luasnip = '',
buffer = '',
cmdline = ":",
path = '',
cmp_zotcite = 'Z',
cmp_r = 'R'
})[entry.source.name] or entry.source.name
return vim_item
end
},
mapping = cmp.mapping.preset.insert({
-- <CR> accepts the currently selected item.
-- Set `select` to `false` to only confirm explicitly selected items.
['<CR>'] = cmp.mapping.confirm({ select = false }),
['<S-CR>'] = cmp.mapping.confirm({
behavior = cmp.ConfirmBehavior.Replace,
select = false,
}),
['<C-Space>'] = cmp.mapping.complete(),
['<C-n>'] = cmp.mapping.select_next_item({
behavior = cmp.SelectBehavior.Insert,
}),
['<C-p>'] = cmp.mapping.select_prev_item({
behavior = cmp.SelectBehavior.Insert,
}),
['<C-d>'] = cmp.mapping.select_next_item({ count = 5 }),
['<C-u>'] = cmp.mapping.select_prev_item({ count = 5 }),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-b>'] = cmp.mapping.scroll_docs(-4),
['<C-c>'] = function(fallback)
cmp.close()
fallback()
end,
['<Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item({ behavior = cmp.SelectBehavior.Insert })
elseif luasnip.locally_jumpable(1) then
luasnip.jump(1)
elseif has_words_before() then
cmp.complete()
else
fallback()
end
end, { 'i', 's' }),
['<S-Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item({ behavior = cmp.SelectBehavior.Insert })
elseif luasnip.locally_jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { 'i', 's' }),
}),
}
end,
config = function(_, opts)
for _, source in ipairs(opts.sources) do
source.group_index = source.group_index or 1
end
local cmp = require("cmp")
cmp.setup(opts)
-- `/` cmdline setup.
cmp.setup.cmdline('/', {
mapping = cmp.mapping.preset.cmdline(),
-- sources = { { name = 'buffer' } }
})
-- `:` cmdline setup.
cmp.setup.cmdline(':', {
mapping = cmp.mapping.preset.cmdline(),
sources = cmp.config.sources({
{ name = 'path' },
{ name = 'cmdline' }
})
})
require("cmp_r").setup({
doc_width = 62,
})
end,
},
}
Clone this wiki locally
You can’t perform that action at this time.