اجعل Vim/Neovim الخاص بك ذكيًا مثل VS Code
قائمة منبثقة مخصصة مع دعم المقتطف
سريع : عملية NodeJS منفصلة لا تؤدي إلى إبطاء Vim في معظم الأوقات.
؟ موثوقة : لغة مكتوبة، تم اختبارها باستخدام CI.
؟ المميز : جميع ميزات LSP 3.16 مدعومة، راجع :h coc-lsp
.
❤️ مرنة : تم تكوينها مثل VS Code، وتعمل ملحقات Coc بشكل مشابه لملحقات VS Code
تأكد من استخدام Vim >= 9.0.0438 أو Neovim >= 0.8.0.
تثبيت العقدة>= 16.18.0:
حليقة -sL install-node.vercel.app/lts | سحق
لمستخدمي المكونات vim:
" استخدم فرع الإصدار (مستحسن) قم بتوصيل 'neoclide/coc.nvim'، {'branch': 'release'}" أو أنشئ من التعليمات البرمجية المصدر باستخدام npmPlug 'neoclide/coc.nvim'، {'branch': 'master' , 'do': 'npm ci'}
في .vimrc
أو init.vim
، ثم أعد تشغيل Vim وقم بتشغيل :PlugInstall
.
الخروج قم بتثبيت coc.nvim لمزيد من المعلومات.
يجب عليك تثبيت ملحقات coc أو تكوين خوادم اللغة لدعم LSP.
تثبيت ملحقات مثل هذا:
:CocInstall coc-json coc-tsserver
أو يمكنك تكوين خادم لغة في coc-settings.json
الخاص بك (افتحه باستخدام :CocConfig
) مثل هذا:
{ "languageserver": {"go": { "command": "gopls"، "rootPatterns": ["go.mod"]، "trace.server": "verbose"، "أنواع الملفات": ["go"] } } }
الخروج من ويكي لمزيد من التفاصيل:
الإكمال مع المصادر
باستخدام ملف التكوين
باستخدام ملحقات كوك
تكوين خوادم اللغة
التعليمات
الخروج :h coc-nvim
لواجهة Vim.
التكوين مطلوب لتسهيل التعامل مع coc.nvim، لأنه لا يغير تعيينات المفاتيح أو خيارات Vim. يتم ذلك قدر الإمكان لتجنب التعارض مع المكونات الإضافية الأخرى.
❗️هام : يمكن لبعض مكونات Vim الإضافية تغيير تعيينات المفاتيح الخاصة بك. الرجاء استخدام أمر مثل :verbose imap <tab>
للتأكد من تفعيل خريطة المفاتيح الخاصة بك.
" https://raw.githubusercontent.com/neoclide/coc.nvim/master/doc/coc-example-config.vim" قد تحتاج إلى Vim (وليس Neovim) نظرًا لأن coc.nvim يحسب إزاحة البايت حسب العدد" utf-8 byte syncset encoding=utf-8" تواجه بعض الخوادم مشكلات مع ملفات النسخ الاحتياطي، راجع #649set nobackupset nowritebackup" وجود وقت تحديث أطول (الافتراضي هو 4000 مللي ثانية = 4 ثوانٍ) يؤدي إلى "تأخيرات ملحوظة وتجربة مستخدم سيئة. وقت التحديث = 300" اعرض عمود الإشارة دائمًا، وإلا فإنه سيؤدي إلى تغيير النص في كل مرة" تظهر التشخيصات/يتم حلها. تعيين عمود الإشارة = نعم" استخدم علامة التبويب لإكمال المشغل مع الأحرف للأمام والتنقل" ملاحظة: هناك دائمًا عنصر كامل محدد افتراضيًا، قد ترغب في تمكين "عدم التحديد بواسطة `"suggest.noselect": true` في ملف التكوين الخاص بك" ملاحظة: استخدم الأمر ':verbose imap <tab>' للتأكد من عدم تعيين علامة التبويب بواسطة مكون إضافي آخر قبل وضع هذا في configinoremap <silent><expr> <TAB> coc#pum#visible() ? coc#pum# التالي(1) : CheckBackspace() ? "<Tab>" : coc#refresh()inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "<Ch>"" اجعل <CR> يقبل عنصر الإكمال المحدد أو أبلغ coc.nvim بالتنسيق" <Cg>u يكسر التراجع الحالي، يرجى تحديد خيارك الخاص في الخريطة <silent><expr > <CR> coc#pum#visible() ؟ coc#pum#confirm() : وظيفة "<Cg>u<CR><cr>=coc#on_enter()<CR>"! إحباط CheckBackspace() دع col = col('.') - 1 العودة! العمود || getline('.')[col - 1] =~# 's'endfunction" استخدم <c-space> لتشغيل الإكمالif has('nvim') inoremap <silent><expr> <c-space> coc#refresh( )آخر inoremap <silent><expr> <c-@> coc#refresh()endif" استخدم `[g` و`]g` للتنقل بين التشخيصات" استخدم `:CocDiagnostics` للحصول على كافة تشخيصات المخزن المؤقت الحالي في موقع listnmap <silent > [g <Plug>(coc-diagnostic-prev)nmap <silent> ]g <Plug>(coc-diagnostic-next)" انتقل إلى رمز التنقل nmap <صامت> gd <Plug>(تعريف coc)nmap <صامت> gy <Plug>(تعريف نوع coc)nmap <صامت> gi <Plug>(تنفيذ coc)nmap <صامت> gr <Plug >(coc-references)" استخدم K لإظهار الوثائق في نافذة المعاينةnoremap <silent> K :call وظيفة ShowDocumentation()<CR>! ShowDocumentation() if CocAction('hasProvider', 'hover')call CocActionAsync('doHover') elsecall Feedkeys('K', 'in') endifendfunction" قم بتمييز الرمز ومراجعه عند الضغط باستمرار على المؤشر autocmd CursorHold * استدعاء صامت CocActionAsync( 'تسليط الضوء')" إعادة تسمية الرمز <leader>rn <Plug>(coc-rename)" تنسيق codexmap المحدد <leader>f <Plug>(coc-format-selected)nmap <leader>f <Plug>(coc-format-selected)augroup mygroup أوتوكمد! "إعداد formatexpr نوع (أنواع) الملفات المحددة autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') "تحديث مساعدة التوقيع على العنصر النائب السريع يقوم مستخدم autocmd CocJumpPlaceholder باستدعاء CocActionAsync('showSignatureHelp')augroup end" تطبيق إجراءات التعليمات البرمجية على كتلة التعليمات البرمجية المحددة" مثال: `<leader>aap` للفقرة الحالية xmap <leader>a <Plug>(coc-codeaction-selected)nmap <leader >a <Plug>(coc-codeaction-selected)" إعادة تعيين المفاتيح لتطبيق إجراءات التعليمات البرمجية عند المؤشر Positionnmap <leader>ac <Plug>(coc-codeaction-cursor)" تؤثر مفاتيح إعادة التعيين لتطبيق إجراءات التعليمات البرمجية على buffernmap <leader> كـ <Plug>(coc-codeaction-source)" قم بتطبيق إجراء الإصلاح السريع الأكثر تفضيلاً لإصلاح التشخيص الكتان الحالي <leader>qf <Plug>(coc-fix-current)" إعادة تعيين المفاتيح لتطبيق إجراءات رمز إعادة التصنيعnmap <silent> <leader>re <Plug>(coc-codeaction-refactor)xmap <silent> <leader>r <Plug>(coc-codeaction-refactor-selected)nmap <silent> <leader>r <Plug>(coc-codeaction-refactor-selected) "قم بتشغيل إجراء Code Lens على خريطة الكتان الحالية <leader>cl <Plug>(coc-codelens-action)" وظيفة الخريطة وكائنات نص الفئة" ملاحظة: يتطلب دعم "textDocument.documentSymbol" من خريطة خادم اللغة إذا كان <Plug>(coc-funcobj-i)omap إذا كان <Plug>(coc-funcobj-i)xmap af <Plug>(coc-funcobj-a)omap af <Plug >(coc-funcobj-a)xmap ic <Plug>(coc-classobj-i)omap ic <Plug>(coc-classobj-i)xmap ac <Plug>(coc-classobj-a)omap ac <Plug>(coc-classobj-a)" إعادة رسم خريطة <Cf > و<Cb> للتمرير على النوافذ العائمة/النوافذ المنبثقةif has('nvim-0.4.0') || has('patch-8.2.0750') nnoremap <silent><nowwait><expr> <Cf> coc#float#has_scroll() ? coc#float#scroll(1) : "<Cf>" nnoremap <silent><nowwait><expr> <Cb> coc#float#has_scroll() ? coc#float#scroll(0) : "<Cb>" inoremap <silent><nowwait><expr> <Cf> coc#float#has_scroll() ? "<cr>=coc#float#scroll(1)<cr>" : "<Right>" inoremap <silent><nowait><expr> <Cb> coc#float#has_scroll() ? "<cr>=coc#float#scroll(0)<cr>" : "<Left>" vnoremap <silent><nowait><expr> <Cf> coc#float#has_scroll() ? coc#float#scroll(1) : "<Cf>" vnoremap <silent><nowwait><expr> <Cb> coc#float#has_scroll() ? coc#float#scroll(0) : "<Cb>"endif" استخدم CTRL-S لنطاقات التحديد" يتطلب دعم "textDocument/selectionRange" للغة servernmap <silent> <Cs> <Plug>(coc-range-select) xmap <silent> <Cs> <Plug>(coc-range-select)" أضف أمر `:Format` لتنسيق أمر المخزن المؤقت الحالي! -nargs=0 Format :call CocActionAsync('format')" أضف أمر `:Fold` لطي أمر المخزن المؤقت الحالي! -نرجس=؟ Fold: استدعاء CocAction('fold', <f-args>)" أضف أمر `:OR` لتنظيم الواردات من المخزن المؤقت الحالي! -nargs=0 OR: استدعاء CocActionAsync('runCommand', 'editor.action.organizeImport' )" أضف دعم خط الحالة الأصلي لـ (Neo) Vim" ملاحظة: يرجى الاطلاع على `:h coc-status` للتكامل مع المكونات الإضافية الخارجية التي" توفر مخصصًا خط الحالة: lightline.vim، vim-airlinesetstatusline^=%{coc#status()}%{get(b:,'coc_current_function','')}" تعيينات لـ CoCList" عرض جميع التشخيصاتnnoremap <silent><nowwait> < space>a :<Cu>تشخيصات CocList<cr>" إدارة الامتداداتnnoremap <صامت><الآن> <space>e :<Cu>CocList ملحقات<cr>" إظهار الأوامرnnoremap <silent><nowait> <space>c :<Cu>أوامر CocList<cr>" ابحث عن رمز المستند الحاليnnoremap <silent><nowait> <space>o :<Cu>مخطط CocList<cr> >" البحث عن رموز مساحة العملnnoremap <silent><nowwait> <space>s :<Cu>CocList -Iرموز<cr>" قم بالإجراء الافتراضي للتالي itemnnoremap <silent><nowait> <space>j :<Cu>CocNext<CR>" قم بالإجراء الافتراضي لـ itemnnoremap السابق <silent><nowait> <space>k :<Cu>CocPrev<CR>" استئناف أحدث قائمة cocnnoremap < صامت><now> <space>p :<Cu>CocListResume<CR>
ملحوظة: هذا يعمل فقط في Neovim 0.7.0dev+.
-- https://raw.githubusercontent.com/neoclide/coc.nvim/master/doc/coc-example-config.lua-- تواجه بعض الخوادم مشكلات تتعلق بملفات النسخ الاحتياطي، راجع #649vim.opt.backup = falsevim.opt .writebackup = false-- يؤدي وجود وقت تحديث أطول (الافتراضي هو 4000 مللي ثانية = 4 ثوانٍ) إلى تأخيرات ملحوظة وضعف المستخدم experiencevim.opt.updatetime = 300-- إظهار عمود الإشارة دائمًا، وإلا فسيتم تغيير النص في كل مرة-- ظهرت/تم حل التشخيصvim.opt.signcolumn = "yes"مجموعة المفاتيح المحلية = vim.keymap.set-- وظيفة الإكمال التلقائي _G. check_back_space()local col = vim.fn.col('.') - 1return col == 0 أو vim.fn.getline('.'):sub(col, col):match('%s') ~= nilend-- استخدم Tab لإكمال المشغل مع الأحرف المقبلة والتنقل-- ملاحظة: هناك دائمًا عنصر إكمال محدد بشكل افتراضي، قد ترغب في التمكين-- لا يوجد تحديد من خلال إعداد `"suggest.noselect": true` في ملف التكوين الخاص بك-- ملاحظة: استخدم الأمر ':verbose imap <tab>' للتأكد من عدم تعيين علامة التبويب بواسطة- - آخر المكونات الإضافية قبل وضع هذا في configlocal opts = {silent = true, noremap = true, expr = true, render_keycodes = false}keyset("i", "<TAB>", 'coc#pum#visible() ? coc#pum#next(1) : v:lua.check_back_space() ? "<TAB>" : coc#refresh()', opts)keyset("i", "<S-TAB>", [[coc#pum#visible() ? coc#pum#prev(1) : "< Ch>"]]، يختار)-- اجعل <CR> يقبل عنصر الإكمال المحدد أو يخطر coc.nvim بالتنسيق-- <Cg>u يكسر التراجع الحالي، يرجى تحديد مجموعة المفاتيح المختارة("i"، "<cr>"، [[coc#pum#visible() ? coc#pum#confirm() : "<Cg>u<CR><cr>=coc#on_enter()<CR>"]]، يختار) - استخدم <cj> لتشغيل snippetskeyset("i"، "<cj>"، "<Plug>(coc-snippets-expand-jump)")-- استخدم <c-space> للتشغيل Completekeyset("i"، "<c-space>"، "coc#refresh()"، {silent = true, expr = true})-- استخدم `[g` و`]g` للتنقل بين التشخيصات-- استخدم `:CocDiagnostics` للحصول على كافة تشخيصات المخزن المؤقت الحالي في الموقع listkeyset("n"، "[g"، "<Plug>(coc-diagnostic-prev)"، {silent = true})keyset("n"، "]g"، "<Plug>(coc-diagnostic-next)"، {silent = true})-- GoTo code navigationkeyset("n"، "gd"، "<Plug" >(تعريف coc)"، {silent = true})keyset("n"، "gy"، "<Plug>(تعريف نوع coc)"، {silent = true})keyset("n"، "gi"، "<Plug>(coc-implementation)"، {silent = true})keyset("n"، "gr"، "<Plug>(coc-references)"، {silent = true})-- استخدم K لإظهار الوثائق في وظيفة نافذة المعاينة _G.show_docs()local cw = vim.fn.expand('<cword>')if vim.fn.index({'vim', 'help'}, vim.bo.filetype) >= 0 ثمvim.api.nvim_command('h ' ..cw)elseif vim.api.nvim_eval('coc#rpc#ready()') ثمvim.fn.CocActionAsync( 'doHover')elsevim.api.nvim_command('!' .. vim.o.keywordprg .. ' ' .. cw)endendkeyset("n", "K", '<CMD>lua _G.show_docs()<CR>', {silent = true})-- قم بتمييز الرمز ومراجعه في حدث CursorHold( المؤشر خامل)vim.api.nvim_create_augroup("CocGroup"، {})vim.api.nvim_create_autocmd("CursorHold"، {group = "CocGroup"،command = "مكالمة صامتة CocActionAsync('highlight')"،desc = "تمييز الرمز تحت المؤشر على CursorHold"})-- مجموعة مفاتيح إعادة تسمية الرمز( "n"، "<leader>rn"، "<Plug>(coc-rename)"، {silent = true})-- تنسيق مجموعة المفاتيح المحددة("x"، "<leader>f"، "<Plug>(coc-format-selected)"، {silent = true})keyset("n"، "<leader>f "، "<Plug>(coc-format-selected)"، {silent = true})-- تم تحديد تنسيق الإعداد filetype(s)vim.api.nvim_create_autocmd("FileType"، {group = "CocGroup"،pattern = "typescript,json"،command = "setl formatexpr=CocAction('formatSelected')"،desc = "نوع الملف المحدد لتنسيق الإعدادexpr (s)."})-- تحديث مساعدة التوقيع عند القفز placeholdervim.api.nvim_create_autocmd("User"، {group = "CocGroup"،pattern = "CocJumpPlaceholder"،command = "call CocActionAsync('showSignatureHelp')"،desc = "تحديث مساعدة التوقيع على العنصر النائب السريع"})-- تطبيق codeAction إلى المنطقة المحددة-- مثال: `<leader>aap` لخيارات الفقرة المحلية الحالية = {silent = صحيح، nowait = true}keyset("x"، "<leader>a"، "<Plug>(coc-codeaction-selected)"، opts)keyset("n"، "<leader>a"، "< Plug>(coc-codeaction-selected)"، opts)--إعادة تعيين المفاتيح لتطبيق إجراءات التعليمات البرمجية في موضع المؤشر.keyset("n"، "<leader>ac"، "<Plug>(coc-codeaction-cursor)"، opts)-- إعادة تعيين المفاتيح لتطبيق إجراءات التعليمات البرمجية المصدر للملف الحالي.keyset("