vim - buka file dan nomor baris goto menggunakan <filename>: <line nbr>:

21

Beberapa alat seperti grep, py.test, dll ... menggunakan pola <FileName>:<line number>:titik kesalahan. Sebagai contoh:

; grep -Hn Common setup.cfg
setup.cfg:11:    Common

Bagaimana saya bisa memodifikasi vim dan gvim sehingga saya bisa memanggil mereka seperti ini:

gvim setup.cfg:11:

dari pada

gvim setup.cfg +11

Saya tahu bahwa saya bisa menulis skrip shell kecil yang akan mengurai hal-hal tetapi saya ingin tahu apakah ada cara yang lebih mudah.

Sardathrion - Pasang kembali Monica
sumber
2
Ini tidak persis analog, tetapi vim memang memiliki fitur untuk memuat output dari grep atau (misalnya) kesalahan kompiler dari make, dan menavigasi di antara mereka. Lihat :help quickfixuntuk info lebih lanjut.
Random832

Jawaban:

16

Anda dapat menggunakan file: plugin baris yang tersedia di sini , yang melakukan persis apa yang Anda inginkan ...

mmigdol
sumber
1
Itu pasti dan dengan bonus tambahan yang dapat Anda gunakan vundle untuk menginstalnya.
Sardathrion
1
Plugin file- referensi referensi memiliki beberapa masalah, termasuk kerusakan saat halaman tab sedang digunakan. vim-fetch melakukan apa yang dilakukan oleh file-line, tetapi lebih baik.
Lekensteyn
9

Tidak ada jalan, dan saya pikir naskah adalah satu-satunya cara. Alasannya, bagaimana jika Anda memiliki file bernama setup.cfg: 11 dan ingin mengeditnya?

Berikut ini adalah skrip cepat yang melakukan apa yang Anda inginkan sebagai oneliner ...

editline() { vim ${1%%:*} +${1##*:}; }
Julian
sumber
Maaf ini tidak akurat: Bagaimana jika Anda memiliki file yang dipanggil +11? Anda tentu saja dapat menggunakannya --untuk itu.
Sardathrion
2
Anda dapat mengedit file +11 dengan mengucapkan vim ./+11
Julian
3

Dengan Vundle.vim , tambahkan ini ke .vimrc:

Plugin 'bogado/file-line'
Dorian
sumber
@Sardathrion: Masalah apa yang Anda miliki?
Dorian
Saya pindah ke neovim dan ada banyak masalah yang menandai modul lain (atau apa pun yang disebut neovim) sebagai tidak kompatibel.
Sardathrion
0

Anda juga dapat menggunakan alias seperti itu:

alias gd 'set number=`echo \!:1 | perl -pe "s/([0-9]*:)?(.+)[,:]([0-9]+).*/\3/"`; set file=`echo \!:1 | perl -pe "s/([0-9]*:)?(.+)[,:]([0-9]+).*/\2/"`; eval "if ($number == $file) then \\
   gvim $file \\
else \\
   gvim $file +$number \\
endif"'
pengguna2683458
sumber