Diberikan serangkaian garis yang terlihat mirip dengan ini:
2001 "Some Kind of Title," Author's Name, Publication Name, 1 Mar.
2002 "Some Kind of Title," Author's Name, Publication Name, 12 Oct.
2003 "Some Kind of Title," Author's Name, Publication Name, 8 Apr.
2004 "Some Kind of Title," Author's Name, Publication Name, 3 Jun.
Apakah ada cara agar saya dapat mengambil empat karakter pertama (tahun), dan menyalinnya ke akhir baris, sehingga terlihat seperti ini:
2001 "Some Kind of Title," Author's Name, Publication Name, 1 Mar. 2001
2002 "Some Kind of Title," Author's Name, Publication Name, 12 Oct. 2002
2003 "Some Kind of Title," Author's Name, Publication Name, 8 Apr. 2003
2004 "Some Kind of Title," Author's Name, Publication Name, 3 Jun. 2004
cut-copy-paste
replace
repeated-commands
campuran
sumber
sumber
:%g/^\d\{4}\d\@!/s/^\(\d\{4}\).*\zs/ \1/
.Jawaban:
adalah salah satu cara untuk melakukannya
\v
Opsi ajaib, untuk menghindari keharusan menghindari pengelompokan()
^
mulai dari garis\d{4}
cocok persis empat digit.*
sisa baris\1
\2
memiliki pola yang cocok di dalamnya()
sunting: @Jair Lopez menyebutkan dalam komentar, ekspresi reguler dapat lebih ditingkatkan:
atau yang setara
&
dan\0
berisi seluruh pola yang cocokUntuk membaca lebih lanjut, vimregex dan regex FAQ
sumber
:%s/\v^(\d{4}).*/& \1/
akan menjadi perintah yang lebih pendek.Dan solusi dengan makro:
Yang berarti:
Anda kemudian dapat memutar ulang makro sebanyak waktu yang Anda miliki
3@a
.Sunting Seperti @evilsoup menyebutkannya di komentar, cara yang lebih efektif untuk mengeksekusi makro pada semua baris buffer adalah dengan menggunakan:
Tentu saja Anda dapat mengganti
%
dengan rentang yang menjelaskan garis yang akan dimodifikasi.sumber
:%normal @q
Inilah cara yang akan saya lakukan:
Penjelasan:
sumber
Jika Anda memiliki akses ke perintah UNIX standar, Anda dapat menggunakan
AWK
:sumber
:help filter
adalah fitur Vim built-in dan mempertimbangkan seberapa baik fitur tersebut memungkinkan Vim masuk dalam paradigma UNIX, saya akan mengatakan itu sangat vi / vim.Saya pikir mekanisme yang ada untuk melakukan ini lebih baik, tetapi juga dimungkinkan untuk melakukan ini menggunakan mode blok visual .
Salin tanggal:
Pad akhir baris pertama:
Tempel:
sumber
4l
alih - alihllll
Dari baris perintah unix (atau windows jika Anda menginstal alat baris perintah unix)
sumber