UltiSnips এবং YouCompleteMe


130

আমার ম্যাকভিমে আমার কাছে বান্ডিল আলটিসনিপস এবং আপনি কমপ্লিম ইনস্টল আছে। সমস্যাটি হ'ল আল্টিসনিপগুলি কাজ করে না কারণ ট্যাবটি ycm দ্বারা আবদ্ধ। আমি রাখার চেষ্টা করেছি let g:UltiSnipsExpandTrigger = "<s-tab>"যাতে আমি স্লিপট ট্যাবটি সহ স্নিপেট সম্পূর্ণ করতে ট্রিগার করতে পারি, তবে এটি কোনও অজানা কারণে কার্যকর হয় না। আমি ক্যাপগুলি ট্রিগার হিসাবে ব্যবহার করতে পারি, তবে এখনও পর্যন্ত আমি এটি করার কোনও উপায় খুঁজে পাইনি।

আপনারা কেউ কি এই দুটি অ্যাড-অন একসাথে ব্যবহার করেন? শিফট-ট্যাবের কাজ করতে আমি কী করতে পারি? স্নিপেটগুলি ট্রিগার করার জন্য আপনি কি আরও একটি কী সুপারিশ করতে পারেন?


ওয়াইসিএম ম্যাপসও <S-Tab>করে এবং তাই আল্টিস্পিপস, আইআইআরসিও করে। আমার ধারণা, আপনার ওয়াইসিএম এর লেখকের কাছে জিজ্ঞাসা করা উচিত।
রোমেনেল

আমি ওয়াইসিতে পূর্ববর্তী সমাপ্তির জন্য কীগুলি পরিবর্তন করেছি এবং এস-ট্যাব সরিয়েছি। এখনও কাজ করছে না. আমি অনুমান করি যে
গিথুবকে

1
আপনার মানচিত্রটি কাজ করছে কিনা দেখুন :verbose map <S-Tab>, সম্ভবত এটি কমান্ড লাইনটিতে কাজ করবে না। একটি খুব ভাল প্রতিস্থাপন ইমো হয় <CR>
দান বাকের

এর জন্য ধন্যবাদ আমি একটি সমাধান খুঁজতে আগ্রহী এবং ইউকমপলিটমে আমার কাছে ফোরাম নেই তা সত্যই বিরক্তিকর। ধন্যবাদ
atmosx

2
আপনি কি আবার চেষ্টা করেছেন? একটি বা উভয় প্লাগইন অবশ্যই আপডেট করা উচিত, কারণ আলটিস্পিপস ডকুমেন্টেশন বলে: "YouCompleteMe - UltiSnips- এর বাক্স সমাপ্তির সহায়তার সাথে আসে It
কাইল স্ট্র্যান্ড

উত্তর:


188

আরেকটি বিকল্প সুপারটাব প্লাগইন ব্যবহার করছে:

" if you use Vundle, load plugins:
Bundle 'ervandew/supertab'
Bundle 'Valloric/YouCompleteMe'
Bundle 'SirVer/ultisnips'

" make YCM compatible with UltiSnips (using supertab)
let g:ycm_key_list_select_completion = ['<C-n>', '<Down>']
let g:ycm_key_list_previous_completion = ['<C-p>', '<Up>']
let g:SuperTabDefaultCompletionType = '<C-n>'

" better key bindings for UltiSnipsExpandTrigger
let g:UltiSnipsExpandTrigger = "<tab>"
let g:UltiSnipsJumpForwardTrigger = "<tab>"
let g:UltiSnipsJumpBackwardTrigger = "<s-tab>"

এখানে YouCompleteMe একটি আলাদা সংমিশ্রণে আবদ্ধ Ctrln, তবে তারপরে সেই সংমিশ্রণটি সুপার ট্যাবের মাধ্যমে ট্যাবে আবদ্ধ। UltiSnips এবং সুপারট্যাব একসাথে দুর্দান্ত খেলতে পারে, সুতরাং আপনি কেবল আলটিস্নিপসকে সরাসরি ট্যাবে আবদ্ধ করতে পারেন এবং সমস্ত কিছুই কার্যকর হবে।


7
জো লিউর পরামর্শটি আমার পক্ষে কাজ করছে না (ট্যাব কোনও কিছুর প্রসার ঘটাবে না, এটি কেবল পরবর্তী স্বতঃপূরণ বিকল্পে স্ক্রোল করবে)। এই উত্তরটি দুর্দান্ত কাজ করেছে, তবে আপনাকে প্রথমে আপনাকে ইউটিপলিউম আপডেট এবং পুনরায় সংকলন করতে হয়েছিল।
বেনিয়ামিনগোল্ডার

1
অন্যরা যেমন বলেছে, জো লিউর সমাধান এখন আর কাজ করছে না। এই এক!
অ্যাঙ্কর

3
স্বতঃপূরণ তালিকায় স্নিপেটগুলি হাইলাইট করার কোনও উপায় আছে কি?
সিনট্যাগমা

3
ধিক! মানুষ ! মোহন মত কাজ! সর্বকালের সেরা সমাধান!
ইয়ভেস ল্যাঞ্জ

4
এটি দুর্দান্ত, তবে tabএকটি স্নিপেটের ভিতরে আঘাত করা YCM পরামর্শ সম্পূর্ণ না করে পরবর্তী ট্যাবস্টপে যাবে। আমি যোগ করতে ছিল let g:UltiSnipsJumpForwardTrigger = "<Right>"এবং let g:UltiSnipsJumpBackwardTrigger = "<Left>"এই কাজ করতে।
গ্যাব্রিয়েল ফ্লোরিট

48

YouCompleteMe ইস্যু ট্র্যাকার থেকে একটি পৃষ্ঠায় এই পরামর্শ চেষ্টা করুন । আপনার .vimrc এ:

let g:UltiSnipsExpandTrigger="<c-j>"

যদিও এই সেটিংটি স্নিপেটের মধ্যে এগিয়ে যাওয়ার জন্য ডিফল্ট ম্যাপিংয়ের ভাগ করে একটি স্নিপেটকে প্রসারিত করবে , এটি উল্টিসনিপস সহায়তা ট্যাগগুলিতে উল্লিখিত টেক্সটমেটসের আচরণ অনুকরণ করে।

যেহেতু আমি আমার ক্যাপস লক কীটি সিটিআরএল এ ম্যাপ করেছি তাই এই ম্যাপিংটি বেশ সুচারুভাবে কাজ করে।


1
এটি সর্বোত্তম উত্তর হওয়া উচিত, সহজ এবং সরল, যদিও ম্যাকোস 10.12 এ আমার ম্যাকভিমে, <cj> কাজ করে না, আমি এটিকে <ck> এ পরিবর্তন করি, তবে সবকিছু ঠিকঠাক কাজ করে। <tab> এগিয়ে, <s-tab> পিছনে, <ck> স্নিপেট প্রসারিত করুন। ধন্যবাদ
gpanda 15

40

নীচের কোডটি আপনার ভিএমআরসি-তে অনুলিপি করুন এবং উপভোগ করুন। এই ফাংশনটি YCM এবং UltiSnips এর মধ্যে সমস্ত সমস্যা পরিচালনা করবে।

function! g:UltiSnips_Complete()
    call UltiSnips#ExpandSnippet()
    if g:ulti_expand_res == 0
        if pumvisible()
            return "\<C-n>"
        else
            call UltiSnips#JumpForwards()
            if g:ulti_jump_forwards_res == 0
               return "\<TAB>"
            endif
        endif
    endif
    return ""
endfunction

au BufEnter * exec "inoremap <silent> " . g:UltiSnipsExpandTrigger . " <C-R>=g:UltiSnips_Complete()<cr>"
let g:UltiSnipsJumpForwardTrigger="<tab>"
let g:UltiSnipsListSnippets="<c-e>"
" this mapping Enter key to <C-y> to chose the current highlight item 
" and close the selection list, same as other IDEs.
" CONFLICT with some plugins like tpope/Endwise
inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"

27
কিছু ক্রেডিট যেখানে এটির কারণ আমি মনে করি: github.com/Valloric/ YouCompleteMe / issues/… এবং বুফএন্টার কিছু মন্তব্য নিচে স্বতঃবৃত হয়েছে।
ches

3
এটি ম্যাক ওএস এক্স এর জন্য আমার পক্ষে কাজ করে বলে মনে হচ্ছে না; জুলাই ২০১৪ এর দশম হিসাবে f
মিগুয়েল.মার্টিন

এখন পর্যন্ত দুর্দান্ত মনে হচ্ছে! তবে আমি কীভাবে স্নিপেট ব্রেকপয়েন্টগুলি "ট্যাব-মাধ্যমে" করতে পারি?
chmanie

1
আমি এটি আবদ্ধ করার পক্ষে g:UltiSnipsJumpForwardTrigger="<cr>"খুব সহজেই পেয়েছি যাতে আমি এখনও সমস্ত সম্ভাব্য
কমপ্লিট

1
এটি আমাকে তালিকাভুক্ত YCM এর মাধ্যমে ট্যাব করতে দেয় (সম্পূর্ণরূপে উল্টিসনিপস প্রস্তাবনা সহ), তবে শেষ ইনোরাম্যাপ <expr> লাইনটি আসলে আমার প্রবেশ কী টিপে প্রভাবিত করছে বলে মনে হচ্ছে না। আমি <সি>> এর সাহায্যে ম্যানুয়ালি সম্পূর্ণরূপে ট্রিগার করতে পারি, তবে প্রবেশ দিয়ে কিছুই হয় না। কোনও পরামর্শ?
HaaR

18

আমি আমার ভিএমআরসি এ আছে

"" YouCompleteMe
let g:ycm_key_list_previous_completion=['<Up>']

"" Ultisnips
let g:UltiSnipsExpandTrigger="<c-tab>"
let g:UltiSnipsListSnippets="<c-s-tab>"

আমি আমার প্রথম চেষ্টাটিতে যা করেছি তা হ'ল, তবে আমি উলটিসনিপসের সাথে উল্টিসনিপসকে ভুল বানান দিয়েছি .. ওহ ভাল, শেষ পর্যন্ত কাজ করেছে!


17

আমি ব্যক্তিগতভাবে <tab>YouCompleteMe এর সাথে ব্যবহার না করে ম্যানুয়ালি এটিকে নেভিগেট করতে বেছে নিয়েছি।

তাই আমি এটিকে আমার সাথে যুক্ত করেছি .vimrc:

let g:ycm_key_list_select_completion=[]
let g:ycm_key_list_previous_completion=[]

যা কেবল tabYCM- এর কীটি অক্ষম করে । পরিবর্তে আপনি চলন কীগুলি (তীর বা CTRL-N/ CTRL-P) ব্যবহার করুন এবং এর সাথে প্রবেশটি নির্বাচন করুন CR। UltiSnips এর সাথে ডিফল্ট কাজ করে tab


5

মাইকেলসলেক , জো লিউ এবং কেবল এই সমস্যাটির থ্রেড এবং এই লোকটির ভিআমআরসি-র সমাধানের সাথে উত্তরগুলি রেখেছি , এখন আমি এটি পেয়েছি যা বেশ কয়েকটি সমস্যার সমাধান করেছে।

function! g:UltiSnips_Complete()
  call UltiSnips#ExpandSnippet()
  if g:ulti_expand_res == 0
    if pumvisible()
      return "\<C-n>"
    else
      call UltiSnips#JumpForwards()
      if g:ulti_jump_forwards_res == 0
        return "\<TAB>"
      endif
    endif
  endif
  return ""
endfunction

function! g:UltiSnips_Reverse()
  call UltiSnips#JumpBackwards()
  if g:ulti_jump_backwards_res == 0
    return "\<C-P>"
  endif

  return ""
endfunction


if !exists("g:UltiSnipsJumpForwardTrigger")
  let g:UltiSnipsJumpForwardTrigger = "<tab>"
endif

if !exists("g:UltiSnipsJumpBackwardTrigger")
  let g:UltiSnipsJumpBackwardTrigger="<s-tab>"
endif

au InsertEnter * exec "inoremap <silent> " . g:UltiSnipsExpandTrigger     . " <C-R>=g:UltiSnips_Complete()<cr>"
au InsertEnter * exec "inoremap <silent> " .     g:UltiSnipsJumpBackwardTrigger . " <C-R>=g:UltiSnips_Reverse()<cr>"

মূলত সিওসি এবং আলটিসনিপসের সাথে একই সমস্যাটি সমাধান করার চেষ্টা করার সময় এটি খুব সহায়ক হয়েছিল। পিএমএমটিকে উপরে এবং নীচে সরানোর পাশাপাশি আলটিসনিপস স্থানধারীদের মধ্যে পিছনে পিছনে সরানোর জন্য <TAB> এবং <S-TAB> ব্যবহার করতে চান। ধন্যবাদ।
110100100

4

যদিও আমি জানি এই পোস্টটি কিছুটা পুরানো, তবে আমার নিজস্ব ফাংশন রয়েছে যা উপরের বর্ণিত পোস্টটির চেয়ে কিছুটা বেশি অনুকূলিত হয়েছে:

function! g:UltiSnips_Complete()
  call UltiSnips#ExpandSnippetOrJump()
  if g:ulti_expand_or_jump_res == 0
    if pumvisible()
      return "\<C-N>"
    else
      return "\<TAB>"
    endif
  endif

  return ""
endfunction

অবশ্যই, আপনি যদি জো লিউ যে সেটিংস সরবরাহ করেন এবং তা কেবল এই ফাংশনটি ব্যবহার করেন সবকিছু ঠিক নিখুঁতভাবে কাজ করবে!

সম্পাদনা: এছাড়াও, আমি YouCompleteMe এবং UltiSnips এর মধ্যে ব্যাক-স্টেপিং কার্যকারিতা বাড়াতে আরেকটি ফাংশন ব্যবহার করি। আমি কী বলতে চাইছি তা আমি আপনাকে প্রদর্শন করব:

function! g:UltiSnips_Reverse()                                                                                               
  call UltiSnips#JumpBackwards()                                                                                              
  if g:ulti_jump_backwards_res == 0        
    return "\<C-P>"                                                                                                           
  endif                                                                                                                       

  return ""                                                                                                                   
endfunction

তারপরে এটি আপনার .vimrc এ রাখুন:

au BufEnter * exec "inoremap <silent> " . g:UltiSnipsJumpBackwardTrigger . " <C-R>=g:UltiSnips_Reverse()<cr>"

পাশাপাশি let g:UltiSnipsJumpBackwardTrigger="<s-tab>"এবং আপনার সেট!


3

আমি উভয় একসাথে ব্যবহার। ডিফল্ট YouCompleteMe শুশ্রূষা করে <Tab>এবং <Down>পরবর্তী সমাপ্তির আইটেমটি এবং নির্বাচন করতে <S-Tab>এবং <Up>পূর্ববর্তী সমাপ্তির বস্তুটি নির্বাচন করুন। আপনি g: ycm_key_list_select_completion এবং g: ycm_key_list_pre स्पष्ट_completion বিকল্পের সাথে YouCompleteMe বাইন্ডিংগুলি পরিবর্তন করতে পারেন । নোট করুন যে বিকল্পগুলি যখন একটি একক স্ট্রিং থেকে স্ট্রিংয়ের তালিকায় পরিবর্তন করা হয়েছিল তখন এই নামগুলির নাম পরিবর্তন করা হয়েছিল।


3

আমি ইউটিপলিউম প্লাগইন-এর পরে আলটিসনিপস প্লাগইনটি ইনস্টল করেছি যাতে আমি ভেবেছিলাম তারা বিবাদমান, তবে বাস্তবে আমার আরও কিছু হস্তক্ষেপ হয়েছে:

set paste

.vimrcএটি উপস্থিত থাকলে তা সরিয়ে ফেলতে ভুলবেন না।


2

যদিও এই পোস্টে অনেক উত্তর ঠিকঠাক কাজ করে, আমি কেবল এটিই বলতে চাই যে ওয়াইসিএম এবং আলটিসনিপের মধ্যে কী বাঁধাইয়ের সংঘর্ষের কারণে সমস্যাটি দেখা দিয়েছে, যখন ওয়াইসিএম আলটিস্নিপ স্নিপেটগুলিকে ডিফল্টরূপে সমর্থন করে, এটি ডিফল্ট আলটিসনিপ সম্প্রসারণ ট্রিগারটিকে <tab>তার সম্পূর্ণ সিলেক্ট কী হিসাবে গ্রহণ করে , তাই UltiSnip স্নিপেটগুলি দ্বারা প্রসারিত করা হবে না <tab>। তাদের আলাদা কী বাঁধাই করুন সমস্যার সমাধান হবে, আমি ব্যক্তিগতভাবে <c-nএবং <c-p>ওয়াইসিএমের জন্য ব্যবহার করি এবং উল্টিসনিপের <tab>জন্য ডিফল্ট ব্যবহার করি। আপনি help youcompletemeভিমে ডকের সাথে আরও বিশদ পেতে পারেন ।


2

সিগফ্রিডের উত্তরের ভিত্তিতে, আমি নিম্নলিখিতগুলি ব্যবহার করছি যা আরও প্রাকৃতিক বলে মনে হচ্ছে:

let g:ycm_key_list_select_completion = ['<C-j>']
let g:ycm_key_list_previous_completion = ['<C-k>']

let g:UltiSnipsExpandTrigger = "<C-l>"
let g:UltiSnipsJumpForwardTrigger = "<C-j>"
let g:UltiSnipsJumpBackwardTrigger = "<C-k>"

আমি c-hjklবাইন্ডিংগুলি অন্য কোথাও ব্যবহার করি (একটি ফলক থেকে অন্যটিতে স্যুইচ করা) তবে এটি কেবলমাত্র সাধারণ মোডে থাকবে তাই সমস্যা নেই।


1

আমি ;UltiSnips প্রসারিত করতে ব্যবহার করি , এটি আমার পক্ষে নিফটি ty

let g:UltiSnipsExpandTrigger = ";"

সম্পাদনা করুন: আমি এখন ব্যবহার করি \কারণ আমি পেয়েছি যে আমি ;ভিমের সন্নিবেশ মোডে টাইপ করতে পারিনি
রুটো কলিন্স

0

আমি ব্যবহার kj। এটি আমার মধ্যে যা আছে .vimrc:

let g:UltisnipsExpandTrigger="kj"

এটি খুব কমই ঘটে থাকে যে আমি এর মধ্যে থাকা শব্দটিতে চলে যাই kj। যদি এটি হয় তবে আমি টাইপ করার পরে কয়েক সেকেন্ড অপেক্ষা করব kএবং এই ধরণের j


0

অন্যদের দ্বারা উল্লিখিত হিসাবে, সিটিকে আল্টিসনিপগুলিতে ম্যাপিং দুর্দান্ত কাজ করে।
let g:UltiSnipsExpandTrigger="<c-j>"

এখন, আপনি যদি আরও কিছুটা এগিয়ে যান এবং এক্সক্যাপ ইনস্টল করুন এবং ব্যবহার করুন
xcape -e "Shift_L=Control_R|J"

আপনি utlitsnips- এর জন্য কেবল শিফট কী ব্যবহার করার শক্তিটি মুক্ত করেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.