#c #vim #vim-plugin #neovim #coc.nvim
#c #vim #vim-плагин #neovim #coc.nvim
Вопрос:
Мое окно автозаполнения nvim не отображается при редактировании кода C . Я пытался следовать этому руководству по отладке, но у меня не было особого успеха. Я использую языковой сервер Kythe, настроенный следующим образом в coc-settings.json
:
{
"languageserver": {
"kythe": {
"command": "/full/path/omitted/kythe_languageserver",
"filetypes": ["python", "go", "java", "cpp", "cc", "c ", "proto"],
"trace.server" : "verbose"
}
}
}
При открытии и запуске файла C :CocList services
я вижу, что языковой сервер запущен:
languageserver.kythe [running] python, go, java, cpp, cc, c , proto
И действительно, в :CocCommand workspace.showOutput
, есть сообщения, указывающие на успешную инициализацию:
[Trace - 4:45:05 PM] Received response 'initialize - (0)' in 264ms.
Result: {
"capabilities": {
"textDocumentSync": 1,
"hoverProvider": true,
"definitionProvider": true,
"referencesProvider": true
}
}
Одна мысль, есть ли здесь недостающая возможность, которая требуется для автозаполнения? В любом случае, когда я редактирую файл и пытаюсь, например, ввести std::
ожидание некоторой формы автозаполнения для этого пространства имен, ничего не происходит, и единственные сообщения, отправляемые на языковой сервер, выглядят следующим образом:
[Trace - 4:45:47 PM] Sending notification 'textDocument/didChange'.
Params: {
"textDocument": {
"uri": "[redacted]",
"version": 4
},
"contentChanges": [
{
"text": "[redacted]"
}
]
}
Исходя из моих ограниченных знаний, я почти уверен, что для автозаполнения также требуется отправка другого типа сообщения на языковой сервер, нет? textDocument/didChange
кажется, только для обновления состояния.
Редактировать: полный набор запрошенных возможностей с помощью nvim:
"capabilities": {
"workspace": {
"applyEdit": true,
"workspaceEdit": {
"documentChanges": true,
"resourceOperations": [
"create",
"rename",
"delete"
],
"failureHandling": "textOnlyTransactional"
},
"didChangeConfiguration": {
"dynamicRegistration": true
},
"didChangeWatchedFiles": {
"dynamicRegistration": true
},
"symbol": {
"dynamicRegistration": true,
"symbolKind": {
"valueSet": [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26
]
},
"tagSupport": {
"valueSet": [
1
]
}
},
"executeCommand": {
"dynamicRegistration": true
},
"configuration": true,
"workspaceFolders": true
},
"textDocument": {
"publishDiagnostics": {
"relatedInformation": true,
"versionSupport": false,
"tagSupport": {
"valueSet": [
1,
2
]
}
},
"synchronization": {
"dynamicRegistration": true,
"willSave": true,
"willSaveWaitUntil": true,
"didSave": true
},
"completion": {
"dynamicRegistration": true,
"contextSupport": true,
"completionItem": {
"snippetSupport": true,
"commitCharactersSupport": true,
"documentationFormat": [
"markdown",
"plaintext"
],
"deprecatedSupport": true,
"preselectSupport": true
},
"completionItemKind": {
"valueSet": [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25
]
}
},
"hover": {
"dynamicRegistration": true,
"contentFormat": [
"markdown",
"plaintext"
]
},
"signatureHelp": {
"dynamicRegistration": true,
"signatureInformation": {
"documentationFormat": [
"markdown",
"plaintext"
],
"parameterInformation": {
"labelOffsetSupport": true
}
}
},
"definition": {
"dynamicRegistration": true
},
"references": {
"dynamicRegistration": true
},
"documentHighlight": {
"dynamicRegistration": true
},
"documentSymbol": {
"dynamicRegistration": true,
"symbolKind": {
"valueSet": [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26
]
},
"hierarchicalDocumentSymbolSupport": true,
"tagSupport": {
"valueSet": [
1
]
}
},
"codeAction": {
"dynamicRegistration": true,
"isPreferredSupport": true,
"codeActionLiteralSupport": {
"codeActionKind": {
"valueSet": [
"",
"quickfix",
"refactor",
"refactor.extract",
"refactor.inline",
"refactor.rewrite",
"source",
"source.organizeImports"
]
}
}
},
"codeLens": {
"dynamicRegistration": true
},
"formatting": {
"dynamicRegistration": true
},
"rangeFormatting": {
"dynamicRegistration": true
},
"onTypeFormatting": {
"dynamicRegistration": true
},
"rename": {
"dynamicRegistration": true,
"prepareSupport": true
},
"documentLink": {
"dynamicRegistration": true,
"tooltipSupport": true
},
"typeDefinition": {
"dynamicRegistration": true
},
"implementation": {
"dynamicRegistration": true
},
"declaration": {
"dynamicRegistration": true
},
"colorProvider": {
"dynamicRegistration": true
},
"foldingRange": {
"dynamicRegistration": true,
"rangeLimit": 5000,
"lineFoldingOnly": true
},
"selectionRange": {
"dynamicRegistration": true
}
},
"window": {
"workDoneProgress": true
}
},
Комментарии:
1. В чем дело
capabilities
Sending request 'initialize - (0)'
? Вы можете получить это при начале вывода:CocCommand workspace.showOutput
.2. Я добавил редактирование с запрошенными возможностями
3. У меня нет env, чтобы попробовать Kythe. Из журналов coc отправляет запрос на сервер с возможностями завершения / определения / x / y / z, сервер отвечает только на наведение / определение / ссылки, это означает, что Kythe может выполнять наведение / определение / ссылки только с поддержкой LSP, поэтому завершений нет.
4. Поддерживает ли Kythe завершение кода? Можете ли вы заставить его работать с VSCode Kythe?github.com/kythe/kythe/tree/master/kythe/typescript /…
5. Из github.com/kythe/kythe/blob/master/kythe/go/languageserver / … , На данный момент Kythe поддерживает только наведение / определение / ссылки.
Ответ №1:
Языковой сервер Kythe пока не поддерживает функции автозаполнения.