سؤال

أريد أن استخدام Ctrl+الفضاء بالنسبة اومني الانتهاء (و الكلمة الانتهاء إذا كان هناك أي omni-إكمال) في همة.لقد حاولت هذه التي وجدت في مكان ما على شبكة الإنترنت:

inoremap <expr> <c-space> pumvisible() ? "\<C-n>" : "\<C-x>\<C-o>\<C-n>\<C-p>\<C-r>=pumvisible() ? \"\\<Down>\" : \"\\<CR>\""

ومع ذلك فإنه لا يعمل.أي شخص باستخدام Ctrl+الفضاء لهذا أيضا الذي يمكن أن تظهر لي الطريقة الصحيحة (التي تعمل) أن تفعل ذلك ؟

الجدير بالذكر هو أنه يحتاج إلى العمل في المحطة نسخة من همة لا gvim.

هل كانت مفيدة؟

المحلول

وجرب هذا:

inoremap <expr> <C-Space> pumvisible() \|\| &omnifunc == '' ?
\ "\<lt>C-n>" :
\ "\<lt>C-x>\<lt>C-o><c-r>=pumvisible() ?" .
\ "\"\\<lt>c-n>\\<lt>c-p>\\<lt>c-n>\" :" .
\ "\" \\<lt>bs>\\<lt>C-n>\"\<CR>"
imap <C-@> <C-Space>

نصائح أخرى

الطريقة المذكورة أعلاه هو "نوع من" العامل ، ولكن الأمر غير قابل للقراءة أنه تقريبا لا أحد يمكن أن يقول ما في الواقع لا. الحل أعلاه ليست جيدة.

الجواب القصير - استخدام هذا:

function! Auto_complete_string()
    if pumvisible()
        return "\<C-n>"
    else
        return "\<C-x>\<C-o>\<C-r>=Auto_complete_opened()\<CR>"
    end
endfunction

function! Auto_complete_opened()
    if pumvisible()
        return "\<Down>"
    end
    return ""
endfunction

inoremap <expr> <Nul> Auto_complete_string()
inoremap <expr> <C-Space> Auto_complete_string()

هذا الجواب أيضا النواحي أن هناك نوعان من القيم الممكنة (اعتمادا على محطة/gvim الاستخدام) على Ctrl+الفضاء: <C-Space> و <Nul>.

يمكنني استخدام نهج مماثل مثل أول واحد في جدي همة, ولكن أكثر للتخصيص.


الجواب طويل - ما سبق لا:

كله الهروب من الإجابة أعلاه مربكة جدا ، لقد تقسيم الإجابة أعلاه إلى تنسيق قابل للقراءة:

function! Auto_complete_string()                               
    if pumvisible()                                            
        return "\<C-n>"                                        
    else                                                       
        return "\<C-x>\<C-o>\<C-r>=Auto_complete_opened()\<CR>"
    end                                                        
endfunction                                                    

function! Auto_complete_opened()                               
    if pumvisible()                                            
        return "\<c-n>\<c-p>\<c-n>"                            
    else                                                       
        return "\<bs>\<C-n>"                                   
    end                                                        
endfunction                                                    

inoremap <expr> <Nul> Auto_complete_string()

وهذا يدل بوضوح على ما هو به.هناك بعض الأمور الغريبة تحدث في Auto_complete_opened.ليس فقط القيام الانتهاء, انها تفعل أشياء إضافية بعد محاولة كاملة:

  • عند محاولة استخدام omnicompletion ، على نحو ما يفعل <C-n><C-p><C-n>, التي يمكن أن IMHO يكون مجرد اختصار <C-n>.
  • في حالة إنجاز غير ناجحة ، فإنه يستخدم backspace و لا الإنجاز مرة أخرى, لا <C-o><C-x> ولكن <C-n>, الذي لا يجعل الكثير من معانيها.

أنا لا أقول أن هذا ليس هو ما بعض المستخدمين قد يريدون, لكنه ربما ليس ما معظم المستخدمين يريدون!جوابي المختصر يأخذ في الائتمان و يعطي لك طريقة بسيطة لتحريره.يمكنك الآن بسهولة تغيير الأمور إذا كنت تريد (على سبيل المثال <Down> إلى <C-n>, إذا كنت تريد الدخول الأول أن تكون مكتوبة من البداية على).

لiterm2 وهمة هذه السطور يعمل بالنسبة لي، وأنا حصلت عليه من جدي-همة

" Next three lines are to enable C-Space to autocomplete, omnicomplete
inoremap <C-Space> <C-x><C-o>
imap <buffer> <Nul> <C-Space>
smap <buffer> <Nul> <C-Space>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top