Targetkan hanya satu baris dalam vim untuk substitusi teks


2

Apakah ada cara di vi (m) untuk menargetkan satu baris tertentu dalam file untuk substitusi string?

Saya perlu sering menambahkan sidik jari SSL SHA dari server Web ke Mercurial .hgrc saya. Saya dapat mengambil tanda tangan yang diperlukan dari Chrome dengan cukup mudah dengan mengklik dua kali gembok dan melihat detail sertifikat, tetapi saya mendapatkan sig dengan pembatas ruang daripada pembatas titik dua yang diinginkan oleh Mercurial

06 32 1C C5 8A 49 77 85 C5 89 6F 67 75 96 F0 43 77 96 EB 90

Contoh dari Google Code .

Apakah ada cara untuk:

  1. Salin kata sidik jari ke clipboard saya
  2. Edit .hgrc saya dengan vi (m)
  3. Masuk ke mode sisipkan untuk menempelkan sidik jari tersebut
  4. Targetkan saja garis itu dengan a

    : s / /: / g

  5. Simpan file

Saat ini saya dapat menempelkan sidik jari ke file baru, melakukan substitusi, dan menariknya ke .hgrc saya dengan nama file: r , tapi itu langkah tambahan yang saya tidak akan keberatan melewatkannya.

Jawaban:


4

Menemukannya:

Pindahkan kursor ke baris yang ingin Anda mod, dan lakukan ini:

.s / /: / g

'.' di depan perintah pengganti memberitahu vi (m) bahwa Anda hanya ingin mengubah baris saat ini.

Ref: http://www.kingcomputerservices.com/unix_101/search_and_replace_with_vi_part_1.htm


1
Setelah membaca tautan yang Anda kirim, saya melihat bahwa titik tersebut tidak diperlukan. Ekspresi asli saya yang sebenarnya berfungsi dengan baik, karena "Kisaran default baris adalah baris saat ini saja." Saya pikir saya salah paham jangkauan "g", mengira itu akan menggantikan semua ruang dalam dokumen.
bpanulla

1

Jika Anda ingin memasukkannya setelah baris N:

:N put =substitute(@+, ' ', '', 'g')

Akhir file: N = $; awal file: N = 0. @ + adalah register clipboard (saat GUI sedang berjalan).


Bagus. Satunya downside adalah langkah tambahan harus mengetahui nomor baris eksplisit. Tapi setidaknya saya melihatnya ditampilkan di kanan bawah editor.
bpanulla

1
Anda dapat menyatakan .atau /pattern/bukannya N untuk merujuk ke baris saat ini atau pola pencocokan baris berikutnya.
Benoit

1

Cukup :s/ /:/gbaik-baik saja.

The :substituteperintah bekerja hanya pada baris saat ini secara default.

The /gpengubah global berarti untuk mengganti semua pertandingan di kisaran tertentu, bukan seluruh file.)


(Saya tahu Anda sudah mengetahuinya, tetapi saya pikir memiliki ini sebagai jawaban eksplisit dapat membantu pembaca di masa depan menghemat beberapa detik.)
Aaron Thoma

-1

apakah Anda bermaksud melakukan ini?

echo "06 32 1C C5 8A 49 77 85 C5 89 6F 67 75 96 F0 43 77 96 EB 90" >> <filename>

Tidak juga. Mencari jawaban yang melibatkan vim.
bpanulla
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.