Saya memiliki bundel ultisnips dan youcompleteme diinstal pada macvim saya. Masalahnya adalah bahwa ultisnips tidak berfungsi karena tab diikat oleh ycm. Saya mencoba meletakkanlet g:UltiSnipsExpandTrigger = "<s-tab>"
sehingga saya dapat memicu penyelesaian cuplikan dengan tab-geser, tetapi tidak berhasil karena alasan yang tidak diketahui. Saya bisa menggunakan topi sebagai pemicunya, tetapi sejauh ini saya tidak menemukan cara untuk melakukannya.
Apakah ada di antara Anda yang menggunakan kedua add-ons itu bersama-sama? Apa yang bisa saya lakukan untuk membuat shift-tab bekerja? Bisakah Anda merekomendasikan kunci lain untuk memicu cuplikan?
vim
autocomplete
macvim
ultisnips
pvinis
sumber
sumber
<S-Tab>
dan begitu juga UltiSnips, IIRC. Anda harus bertanya kepada penulis YCM, saya kira.:verbose map <S-Tab>
, mungkin tidak akan bekerja pada vim baris perintah. Imo pengganti yang cukup bagus adalah<CR>
.Jawaban:
Opsi lain menggunakan plugin SuperTab:
Di sini YouCompleteMe terikat ke kombinasi yang berbeda Ctrln, tetapi kemudian kombinasi tersebut terikat ke tab melalui SuperTab. UltiSnips dan SuperTab bermain bagus bersama, jadi Anda bisa mengikat UltiSnips langsung ke tab dan semuanya akan berhasil.
sumber
tab
di dalam cuplikan akan masuk ke tabstop berikutnya, alih-alih menyelesaikan saran YCM. Saya harus menambahkanlet g:UltiSnipsJumpForwardTrigger = "<Right>"
danlet g:UltiSnipsJumpBackwardTrigger = "<Left>"
membuat ini berfungsi.Coba saran ini pada halaman dari pelacak masalah YouCompleteMe. Di .vimrc Anda:
Meskipun pengaturan ini akan membuat perluasan potongan cuplikan pemetaan default untuk melompat maju dalam potongan , itu mensimulasikan perilaku TextMates 'seperti yang disebutkan dalam tag bantuan UltiSnips.
Karena saya telah memetakan tombol Caps Lock ke Ctrl, pemetaan ini berfungsi dengan sangat lancar.
sumber
salin kode berikut ke vimrc Anda, dan selamat menikmati. Fungsi ini akan menangani semua masalah antara YCM dan UltiSnips.
sumber
g:UltiSnipsJumpForwardTrigger="<cr>"
sehingga saya masih bisasaya punya ini di vimrc saya
Itulah yang saya lakukan pada percobaan pertama saya, tetapi saya salah mengeja UltiSnips dengan Ultisnips .. oh well, akhirnya berhasil!
sumber
Saya pribadi memilih untuk tidak menggunakan
<tab>
dengan YouCompleteMe tetapi menavigasi secara manual.Jadi saya menambahkan ini ke
.vimrc
:yang hanya menonaktifkan tabkunci untuk YCM. Sebagai gantinya Anda menggunakan tombol gerakan (panah atau
CTRL-N
/CTRL-P
) dan memilih entri dengan CR. UltiSnips berfungsi dengan default tab.sumber
Hanya dengan mengumpulkan jawaban oleh Michaelslec, Joey Liu dan bersama dengan solusi yang saya temukan di utas masalah ini dan vimrc orang ini , saya sekarang memiliki ini yang memecahkan hampir semua masalah.
sumber
Meskipun saya tahu posting ini agak lama, saya memiliki fungsi saya sendiri yang sedikit lebih dioptimalkan daripada yang diberikan di atas:
Tentu saja, jika Anda hanya menyimpan pengaturan yang disediakan Joey Liu dan kemudian hanya menggunakan fungsi ini semuanya akan bekerja dengan sempurna!
EDIT: Juga, saya menggunakan fungsi lain untuk meningkatkan fungsionalitas back-stepping antara YouCompleteMe dan UltiSnips. Saya akan menunjukkan kepada Anda apa yang saya maksud:
Kemudian cukup letakkan ini di .vimrc Anda:
Serta
let g:UltiSnipsJumpBackwardTrigger="<s-tab>"
dan set Anda!sumber
Saya menggunakan keduanya bersama-sama. Secara default YouCompleteMe mengikat
<Tab>
dan<Down>
memilih item penyelesaian selanjutnya dan juga<S-Tab>
dan<Up>
untuk memilih item penyelesaian sebelumnya. Anda dapat mengubah binding YouCompleteMe dengan opsi g: ycm_key_list_select_completion dan g: ycm_key_list_previous_completion . Perhatikan bahwa nama-nama opsi ini baru-baru ini berubah ketika opsi diubah dari string tunggal ke daftar string.sumber
Saya menginstal plugin UltiSnips setelah plugin YouCompleteMe jadi saya pikir mereka saling bertentangan, tetapi pada kenyataannya saya memiliki sesuatu yang lebih mengganggu:
Pastikan untuk menghapusnya
.vimrc
jika ada.sumber
Sementara Banyak jawaban berfungsi dengan baik di pos ini, saya hanya ingin mengatakan bahwa masalahnya disebabkan oleh tabrakan pengikatan kunci antara YCM dan UltiSnip, sementara YCM mendukung cuplikan UltiSnip secara default, dibutuhkan pemicu ultiSnip memperluas standar
<tab>
sebagai kunci pilih penyelesaiannya, jadi Cuplikan UltiSnip tidak akan diperluas oleh<tab>
. Memberi mereka pengikatan kunci yang berbeda akan menyelesaikan masalah, saya pribadi menggunakan<c-n
dan<c-p>
untuk YCM dan menggunakan default<tab>
untuk UltiSnip. Anda bisa mendapatkan detail lebih lanjut denganhelp youcompleteme
doc in vim.sumber
Berdasarkan jawaban Siegfried, saya menggunakan yang berikut ini yang tampaknya lebih alami:
Saya juga menggunakan
c-hjkl
binding di tempat lain (beralih dari panel ke yang lain), tapi itu hanya dalam mode normal, jadi tidak ada masalah.sumber
Saya menggunakan
;
untuk memperluas UltiSnips, itu sangat bagus untuk sayasumber
\
karena saya menemukan saya tidak bisa mengetik;
pada mode insert VimSaya menggunakan
kj
. Inilah yang ada di saya.vimrc
:let g:UltisnipsExpandTrigger="kj"
.Jarang terjadi bahwa saya menemukan kata yang ada
kj
di dalamnya. Jika ini masalahnya saya hanya akan menunggu beberapa detik setelah mengetikk
dan tipe ituj
.sumber
Seperti yang disebutkan oleh orang lain, pemetaan Cj ke ultisnips berfungsi dengan baik.
let g:UltiSnipsExpandTrigger="<c-j>"
Sekarang, jika Anda melangkah lebih jauh dan instal xcape dan gunakan
xcape -e "Shift_L=Control_R|J"
Anda melepaskan kekuatan hanya menggunakan tombol shift untuk utlitsnips.
sumber