Bagaimana saya bisa mendapatkan Vim untuk menunjukkan dokumentasi fungsi C / C ++?


17

Sebagian besar editor memiliki fitur seperti ketika Anda menekan beberapa tombol dengan menempatkan tanda sisir di atas suatu fungsi, itu akan memunculkan dokumentasi dari fungsi tersebut bersama dengan jumlah dan jenis argumen yang digunakan fungsi tersebut.

Saya bertanya-tanya apakah Vim menawarkan dukungan seperti itu. Sebagai contoh, saat menulis kode dalam C, saya menggunakan fungsi bawaan qsort(). Karena saya tidak yakin tentang jenis dan jumlah argumen yang diperlukan, saya ingin mengetahuinya tanpa melarikan diri dari Vim. Apa itu mungkin?


2
Tidak yakin ini persis apa yang Anda inginkan, tetapi jika Anda memberikan nilai yang tepat pada opsi 'keywordprg'(nama program yang dapat menangani dokumentasi untuk bahasa yang Anda inginkan), maka dengan menekan Kpada kata kunci (yang dapat menjadi nama dari suatu fungsi), Anda harus mendapatkan info yang Anda inginkan. Misalnya, jika Anda menginstal cppman( github.com/aitjcize/cppman ) dan menambahkan autocmd di dalam vimrc Anda seperti autocmd FileType cpp setlocal keywordprg=cppman, maka cppmanharus menangani dokumentasi di dalam buffer c ++. Tidak diuji.
Saginaw

2
@saginaw Sementara cppmanadalah saran yang sangat baik, jika Anda memiliki halaman manual C dan C ++ ( manpages-posix-devdan libstdc++-X.Y-docpaket pada sistem berbasis Debian) diinstal, polos lama manharus bekerja.
muru

Jawaban:


8

Jika Anda dapat mengatur YouCompleteMe , ia mendukung C, C ++, JavaScript, Go dan beberapa bahasa lainnya. Ini sedang beraksi:

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Ini agak menjengkelkan untuk menginstal , dan setelah itu diinstal Anda perlu mengkonfigurasinya untuk C dan C ++ dengan membuat .ycm_extra_conf.py. Saya mengangkat satu dari repo ini , dan mendapatkan efek ini.


4
"Agak mengganggu untuk menginstal," ... Itu terlalu meremehkan. Tetap saja itu sangat bagus. ^ _ ~
Sardathrion

4
Apakah ada cara untuk memaksa pop-up penyelesaian agar tetap dibuka saat argumen fungsi diketik? Misalnya, segera setelah Anda mengetik huruf pertama dari argumen pertama qsort(a, jendela pop-up menghilang, sehingga sulit untuk mengingat argumen berikutnya.
thiagowfx

1
Tapi itu hanya menunjukkan prototipe fungsi. Bagaimana membuatnya menampilkan komentar doxygen-nya (seperti yang dilakukan Eclipse dengan javadocs)? Maksud saya parameter, output, catatan, ref ...
Zeta.Investigator

1
@ Zeta.Investigator Satu hal yang sangat saya gunakan dalam Python adalah YcmCompleter GoTo, yang biasanya mengirim Anda ke tempat fungsi / kelas didefinisikan dalam kode. Itu adalah baris tepat di atas docstring, yang mencantumkan semua yang Anda minta. Saya tidak yakin apakah inline commenting berada di tempat yang sama di C / Java / C ++.
user1717828

8

Untuk C, menekan Kkata kunci akan langsung membuka manual bawaan. Misalnya, tempatkan kursor pada printfkata kunci:

printf("Hello, %s!", foo);

Sekarang tekan K(huruf besar K) dan halaman manual untuk printfakan muncul di VIM:

NAME
   printf - format and print data

SYNOPSIS
   printf FORMAT [ARGUMENT]...
   printf OPTION

DESCRIPTION
   Print ARGUMENT(s) according to FORMAT, or execute according to OPTION:

   --help display this help and exit

   --version
          output version information and exit

   FORMAT controls the output as in C printf.  Interpreted sequences are:

   \"     double quote
   \\     backslash

   ... It continues for quite a few scrollable pages

Ini sepertinya bekerja di luar kotak di semua distro yang diturunkan dari Debian yang telah saya coba, tidak diperlukan konfigurasi khusus.


1
Itu adalah halaman dari printf(1)perintah, bukan printf(3)fungsi. Bagaimanapun, manual fungsi C berasal manpages-dev, yang biasanya diinstal secara default, tetapi tidak selalu, dan fungsi POSIX di manpages-posix-dev- biasanya tidak diinstal secara default, begitu pula dokumentasi C ++ ( libstdc++-X.Y-doc).
muru

5

Jika Anda menginginkan dokumentasi yang tepat , plugin dalam komentar saginaw tampaknya menutupi kebutuhan C ++ Anda. Saya tidak tahu yang generik tetapi Anda mungkin dapat menemukan alternatif untuk bahasa lain di vim.org.


Jika…

  • kode Anda sudah diindeks dengan ctag,
  • indeks Anda juga termasuk perpustakaan standar,
  • dan semua yang Anda inginkan hanyalah sebuah petunjuk ,

Anda dapat menggunakan <C-w>}untuk membuka definisi kata kunci di bawah kursor Anda di jendela pratinjau. YMMV, tentu saja.

Lihat :help preview-window, :help tagsdan :help ctags.


Anda juga dapat menggunakan fungsionalitas "sertakan-pencarian" bawaan Vim: tekan [iuntuk mencetak "tanda tangan" dari kata di bawah kursor pada baris perintah:

[saya

Lihat :help include-search.


1
[ianeh. Ini bekerja untuk stdlib.hdan qsort, tetapi tidak cstdlibdan std::qsortatau hanya qsort.
muru

Bagi mereka yang tidak terbiasa dengan nomenklatur karena saya adalah <C-w>sarana CTRL-WYang nomenklatur yang digunakan dalam :helpfile. Anda kemudian dapat menggunakan :pcuntuk menutup jendela pratinjau.
danielson317

1

Tipe file C / C ++ Vim hadir dengan fungsi omnicompletion yang layak, yang mendukung fungsionalitas "preview". Jadi tambahkan "pratinjau" ke opsioptimal Anda dan lihat tanda tangan fungsi ketika Anda memasukkan mode penyelesaian.

Dalam mode normal, Anda dapat CTRL + W} untuk membuka deklarasi fungsi di jendela pratinjau secara manual.


1

Seperti disebutkan menekan Kpada kata kunci berfungsi dengan mencari halaman manual. Untuk mendapatkan halaman manual C ++ Anda dapat mencoba https://github.com/aitjcize/cppman (mendapat "halaman manual" dari cplusplus.com dan cppreference.com).


0

Instal YouCompleteMe. Saat Anda meletakkan kursor di atas pengidentifikasi, masukkan YcmCompleter GetDocperintah untuk mendapatkan dokumen di jendela pratinjau kecil di bagian bawah. Ia bekerja di banyak bahasa seperti python dan c / c ++.

Youcompleteme juga menampilkan jendela pratinjau selama fitur pelengkapan otomatisnya. Anda dapat menyesuaikan perilaku pratinjau dokumen dengan g:ycm_autoclose_preview_window_after_completionvariabel.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.