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.


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 ...


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##*:}; }

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'

@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"'
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.