質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

Q&A

1回答

829閲覧

[nvim] lspkind-nvimプラグインでアイコンを補完画面に表示できない原因が知りたい

samidare_chan

総合スコア18

Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

0グッド

0クリップ

投稿2023/12/22 10:37

質問内容

以下のコードなのですが 参考サイトのlspkind-nvimのコードをPackerを使ってインストールして利用しています。
githubサイトのようにアイコンを表示させたいのですが表示されませんこれはなぜでしょうか?

知りたいこと

補完ウインドウでアイコンを表示させたい

試した事

nerd font をインストール
提示コードの(See [#30](https://github.com/onsails/lspkind-nvim/pull/30))を見ましたがnvimのバージョンが古く参考になりません。
補完ウインドウは表示されているためプラグインは有効です。
mode = 'symbol_text',--preset = 'codicons',preset = 'default',等の位置を変えたりしましたが表示されません

参考サイト

nerd font https://www.nerdfonts.com/#home
github: https://github.com/onsails/lspkind.nvim
reddit: https://www.reddit.com/r/neovim/comments/15z8pk9/lspkind_doesnt_do_anything/
イメージ説明

提示コード --- コメント部参照

lua

1local M = {} 2M.setup = function() 3 4local lspconfig = require('lspconfig') 5local cmp_nvim_lsp = require('cmp_nvim_lsp') 6local lspkind = require('lspkind') 7local cmp = require("cmp") 8local types = require("cmp.types") 9local str = require("cmp.utils.str") 10local lsp = require("lspconfig") 11lspkind.init({}) 12 13-- Lspkindのrequire 14--補完関係の設定 15lspconfig.clangd.setup{ 16 capabilities = require('cmp_nvim_lsp').default_capabilities(vim.lsp.protocol.make_client_capabilities()), 17 18 -- 補完の設定 19 init_options = { 20 clangdFileStatus = true, 21 usePlaceholders = true, 22 completeUnimported = true, 23 semanticHighlighting = true, 24 }, 25 26 -- ドキュメント表示の設定 27 handlers = { 28 ["textDocument/hover"] = function(_, result, ctx) 29 if result and result.contents then 30 vim.lsp.util.hover_or_preview(opts, result.contents, ctx.bufnr, ctx.winid, ctx.range.start, ctx.range["end"]) 31 end 32 end, 33 }, 34} 35 36cmp.setup({ 37 snippet = { 38 expand = function(args) 39 vim.fn["UltiSnips#Anon"](args.body) 40 end, 41 }, 42 sources = { 43 { name = "nvim_lsp" }, 44 { name = "UltiSnips" }, 45 { name = "buffer" }, 46 { name = "path" }, 47 }, 48 mapping = cmp.mapping.preset.insert({ 49 ["<C-p>"] = cmp.mapping.select_prev_item(), --Ctrl+pで補完欄を一つ上に移動 50 ["<C-n>"] = cmp.mapping.select_next_item(), --Ctrl+nで補完欄を一つ下に移動 51 ['<C-l>'] = cmp.mapping.complete(), 52 ['<C-e>'] = cmp.mapping.abort(), 53 ["<C-y>"] = cmp.mapping.confirm({ select = true }),--Ctrl+yで補完を選択確定 54 }), 55 experimental = { 56 ghost_text = false, 57 }, 58 59 60 -- 補完の設定 61 init_options = { 62 clangdFileStatus = true, 63 usePlaceholders = true, 64 completeUnimported = true, 65 semanticHighlighting = true, 66 }, 67 68 -- ドキュメント表示の設定 69 handlers = { 70 ["textDocument/hover"] = function(_, result, ctx) 71 if result and result.contents then 72 vim.lsp.util.hover_or_preview(opts, result.contents, ctx.bufnr, ctx.winid, ctx.range.start, ctx.range["end"]) 73 end 74 end, 75 }, 76mode = 'symbol_text', 77--preset = 'codicons', 78preset = 'default', 79 -- Lspkind(アイコン)を設定 80 formatting = { 81---------------------------------------------------------------------------------- 82 format = require('lspkind').cmp_format({ 83 -- The function below will be called before any actual modifications from lspkind 84 -- so that you can provide more controls on popup customization. (See [#30](https://github.com/onsails/lspkind-nvim/pull/30)) 85 mode = 'symbol', -- show only symbol annotations 86 maxwidth = 50, -- prevent the popup from showing more than provided characters (e.g 50 will not show more than 50 characters) 87 ellipsis_char = "...", -- when popup menu exceed maxwidth, the truncated part would show ellipsis_char instead (must define maxwidth first) 88----------------------------------------------------------------------------------- 89 90 91 }) 92 } 93 --- capabilities = cmp_nvim_lsp.default_capabilities() 94}) 95 96 97cmp.setup.cmdline('/', { 98 mapping = cmp.mapping.preset.cmdline(), 99 sources = { 100 { name = 'buffer' } --ソース類を設定 101 } 102}) 103cmp.setup.cmdline(":", { 104 mapping = cmp.mapping.preset.cmdline(), 105 sources = { 106 { name = "path" }, --ソース類を設定 107 }, 108}) 109 110vim.opt.completeopt = "menu,menuone,noselect" 111end 112 113return M

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

cmp.setupに与えている、init_optionshandlersmodepresetがnvim-cmpに与えるべき項目なのか確認してみていただけますか?

ざっと見た限りでは、init_optionshandlersは19行目から33行目に同様の記述があり、lspconfigの設定かなと推測されます。
modeに関しては、85行目に同様の記述があるようにlspkind.cmp_formatのオプションの一つであると思われます。
presetに関しては、lspkind.nvimの実装を見るとlspkind.cmp_formatのオプションの一つとして与えられそうだとわかります。(該当のコード)

おそらく、以上に上げた4つはcmp.setupに与えるべき内容ではなく、それぞれ他の適切な場所に移すか記述自体が不要なので削除する等を行うべきかと思います。
nvim-cmpのヘルプにsetupに渡せる内容が詳細に書かれていますので、そちらも確認してみてください。

また、lspkind.nvimのREADMEを見る限りでは、nvim-cmpを使用している場合、提示いただいたコードの11行目にある、lspkind.init({})は不要であるように見受けられます。

以上のことをまとめると、次のように修正されると正しく動くのではないでしょうか?

lua

1local M = {} 2M.setup = function() 3 4local lspconfig = require('lspconfig') 5local cmp_nvim_lsp = require('cmp_nvim_lsp') 6local lspkind = require('lspkind') 7local cmp = require("cmp") 8local types = require("cmp.types") 9local str = require("cmp.utils.str") 10local lsp = require("lspconfig") 11 12-- Lspkindのrequire 13--補完関係の設定 14lspconfig.clangd.setup{ 15 capabilities = require('cmp_nvim_lsp').default_capabilities(vim.lsp.protocol.make_client_capabilities()), 16 17 -- 補完の設定 18 init_options = { 19 clangdFileStatus = true, 20 usePlaceholders = true, 21 completeUnimported = true, 22 semanticHighlighting = true, 23 }, 24 25 -- ドキュメント表示の設定 26 handlers = { 27 ["textDocument/hover"] = function(_, result, ctx) 28 if result and result.contents then 29 vim.lsp.util.hover_or_preview(opts, result.contents, ctx.bufnr, ctx.winid, ctx.range.start, ctx.range["end"]) 30 end 31 end, 32 }, 33} 34 35cmp.setup({ 36 snippet = { 37 expand = function(args) 38 vim.fn["UltiSnips#Anon"](args.body) 39 end, 40 }, 41 sources = { 42 { name = "nvim_lsp" }, 43 { name = "UltiSnips" }, 44 { name = "buffer" }, 45 { name = "path" }, 46 }, 47 mapping = cmp.mapping.preset.insert({ 48 ["<C-p>"] = cmp.mapping.select_prev_item(), --Ctrl+pで補完欄を一つ上に移動 49 ["<C-n>"] = cmp.mapping.select_next_item(), --Ctrl+nで補完欄を一つ下に移動 50 ['<C-l>'] = cmp.mapping.complete(), 51 ['<C-e>'] = cmp.mapping.abort(), 52 ["<C-y>"] = cmp.mapping.confirm({ select = true }),--Ctrl+yで補完を選択確定 53 }), 54 experimental = { 55 ghost_text = false, 56 }, 57 58 -- Lspkind(アイコン)を設定 59 formatting = { 60 format = require('lspkind').cmp_format({ 61 -- The function below will be called before any actual modifications from lspkind 62 -- so that you can provide more controls on popup customization. (See [#30](https://github.com/onsails/lspkind-nvim/pull/30)) 63 mode = 'symbol', -- show only symbol annotations 64 -- default symbol map 65 -- can be either 'default' (requires nerd-fonts font) or 66 -- 'codicons' for codicon preset (requires vscode-codicons font) 67 preset = 'default', -- nerdfont を使用しているとのことですので、おそらくdefaultのままで問題ないでしょう。 68 maxwidth = 50, -- prevent the popup from showing more than provided characters (e.g 50 will not show more than 50 characters) 69 ellipsis_char = "...", -- when popup menu exceed maxwidth, the truncated part would show ellipsis_char instead (must define maxwidth first) 70 }) 71 } 72 --- capabilities = cmp_nvim_lsp.default_capabilities() 73}) 74 75 76cmp.setup.cmdline('/', { 77 mapping = cmp.mapping.preset.cmdline(), 78 sources = { 79 { name = 'buffer' } --ソース類を設定 80 } 81}) 82cmp.setup.cmdline(":", { 83 mapping = cmp.mapping.preset.cmdline(), 84 sources = { 85 { name = "path" }, --ソース類を設定 86 }, 87}) 88 89vim.opt.completeopt = "menu,menuone,noselect" 90end 91 92return M

投稿2023/12/22 19:10

Hansyo

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

samidare_chan

2023/12/23 02:28

行いましたが、表示されません。`mode = 'symbol'`を `mode=symbol_text`という設定にしたら 文字が表示されました。`class`等の色付きで右側に表示されました。 設定の仕方は回答で正しいと思うのですが、フォントの問題でしょうか?こちらかダウンロードしてきたフォントに端末の設定を変更しているのですが。環境はubuntu 20.4 fish shellです
Hansyo

2023/12/23 03:46

> ダウンロードしてきたフォント 具体的に、どのフォントをインストールしたか教えてください。 nerd fontには複数のフォントが存在するため、どのフォントを導入したのかを一旦明確にしましょう。 > 端末の設定 外部サイトで申し訳ないですが、 https://www.google.com/amp/s/vpslife.server-memo.net/ubuntu_terminal_font/%3famp=1 こちらを見てインストールしたフォントをもう一度設定し直してみてください。 その後、 https://www.nerdfonts.com/cheat-sheet から、適当なアイコンを検索して、コピーしてください。 お使いのターミナルに貼り付けて、アイコンが表示されれば適切に設定されているかの確認ができると思います。
samidare_chan

2023/12/23 04:11

はい、端末の設定を確認してフォントを指定にチェックが`On`になっていることをサイドフォントを指定して確認してました。 フォントは`source code pro `で `chat-sheet `から`variable`と入力して``をコンソール画面ににて `print  `と実行したところ、エンターキーを押す前に変数の絵文字に変換されています。
Hansyo

2023/12/23 09:15

情報を見落としていましたが、ubuntu20.04のneovimを使用しているのですね。 `nvim --version` などで現在のneovimのバージョンを確認してください。 0.4.3 であれば、neovimのバージョンが古すぎて動かない可能性が高いので、stableバージョンのneovimをインストールし直すことで問題が解決するかもしれません。 https://www.linuxcapable.com/how-to-install-neovim-on-ubuntu-linux/ の Method 2: Install Neovim with Neovim Team PPA on Ubuntu にある、次のコマンドを実行してみてください。 ``` sudo add-apt-repository ppa:neovim-ppa/stable -y sudo apt update sudo apt install neovim ``` 実行後、もう一度neovimのバージョンを確認してください。 おそらく0.9.2になっていると思います。 この状態で補完候補にアイコンが表示されるか確かめてみてください。 これでも解決できなければ、申し訳ありませんが私にもわかりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問