Vim ile bir dosyanın kodlamasını nasıl değiştirebilirim?


235

Bir dosyanın satır sonlarını değiştirmek için vim kullanmaya alışkınım:

$ file file
file: ASCII text, with CRLF line terminators
$ vim file
:set ff=mac
:wq
$ file file
file: ASCII text, with CR line terminators

Bir dosyanın unicode kodlamasını değiştirmek için benzer bir işlem kullanılabilir mi? Aşağıdakileri deniyorum, ki bu işe yaramıyor:

$ file file.xml
file.xml: Unicode text, UTF-16, little-endian
$ vim file
:set encoding=utf-8
:wq
$ file file.xml
file.xml: Unicode text, UTF-16, little-endian

Birisinin "fileencoding = utf-8 ayarlayabildiğini, sonra dosyayı güncelleyip yazdığını ve çalıştığını" söyleyebildiğini gördüm , ama bir şey eksik gibi görünüyor, ya da başka bir şekilde kafası karışmıştı. "Öyleyse güncelle" ile ne demek istediğini bilmiyorum.

Yanıtlar:



163

Arasında bir fark olduğuna dikkat edin

kodlamayı ayarla

ve

dosya kodlamasını ayarla

İlk durumda, terminalde gösterilen çıkış kodlamasını değiştirirsiniz. İkinci durumda, yazılan dosyanın çıktı kodlamasını değiştirirsiniz.


1
teşekkür ederim! Apache utf-8 çıktı, php de öyle, bu yüzden tarayıcı dedi, bu yüzden vim ile dedi set encodingve yine de sayfalar iso-8859-1 olarak iyi olan karışık karakterler gösterdi. kullanarak set fileencodinggüzel bir 'Latin1' gösterdi
Adriano Varoli Piazza

77

Bunu yapmak için vim'i kullanmak mükemmel bir şekilde mümkündür, neden iconv'yi kullanmıyorsunuz? Yani - sadece kodlama dönüşüm yapmak için metin editörü yüklemek çok küçük çivi için çok büyük çekiç kullanmak gibi görünüyor.

Sadece:

iconv -f utf-16 -t utf-8 file.xml > file.utf8.xml

Ve işiniz bitti.


19
Dezavantajı, iconv Windows'ta kolayca bulunmayabilir.
Adriano Varoli Piazza

2
@AdrianoVaroliPiazza ne vim.

1
Birden fazla "sadece yükle" diyebilirim, taşınabilir bir baskı bile "kolayca kullanılabilir" anlamına gelir
Adriano Varoli Piazza

2
@ adriano-varoli-piazza Hayır, iconv, @ coder-tim'in belirttiği gibi Cygwin ve MingW içeren Windows'ta kullanılabilir.
t0r0X

1
@mario Hayır, Vim Windows'da kolayca kullanılabilir: vim.org/download.php#pc
t0r0X

52

Tıpkı adımlarınız gibi, dosya kodlama ayarlarının da çalışması gerekir. Ancak, editörün dosyayı UTF8 olarak görmesine yardımcı olmak için bir "set bombası" eklemek istiyorum.

$ vim file
:set bomb
:set fileencoding=utf-8
:wq

8
Cevabınız için teşekkürler, UTF bayt sipariş işareti hakkında daha fazla bilgi edinmeme yol açtı. Bununla birlikte FYI, bir Malzeme Listesi ayarlamak, 16 veya 32 gibi sabit bir bayt uzunluğu biçimi olmadığından UTF-8 için gereksiz / tavsiye edilemez gibi görünüyor . Açıklama ve referans için buraya bakın . Vim için bir sorun (ve hatta yararlı) değil, sadece insanların başka bir yerde uyumluluk sorunlarına neden olabileceğini bilmeleri gerektiğini düşündüm.
joelhardi

2
Yoksa bombya bomda olabilir unsetmi? EDIT : Evet, üzerinden kaldırabilirsiniz set nobomb.
icedwater

6
Evet, bize bomb(ab ile) kurduk.
ruffin

dokümanlar başına, :set bombeğer açık :set fenc=utf-8.. ..:he bomb
Evan Carroll

12
tüm temel
kodlamamız

6

Dosya okunmadan önce kodlamayı komut satırında değiştirmek yararlı olabilir :

rem On MicroSoft Windows
vim --cmd "set encoding=utf-8" file.ext
# In *nix shell
vim --cmd 'set encoding=utf-8' file.ext

Bkz başlayarak , --cmd.


3
İlk varyasyon ayrıca * nix mermileri üzerinde de çalışmalıdır. 'single quotes'yalnızca tüm meta karakterlerden kaçmak için gereklidir, bu genellikle istediğiniz şey değildir.
jpaugh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.