Editörler (Vim)

İngilizce uzun yazılar yazmak ve kod yazmak çok farklı aktiviteler. Programlama yaparken dosyaları değiştirdiğin, okuduğun, yönlendirdiğin ve kod düzenlemeleri yaptığın için uzun bir yazı yazmaya kıyasla daha fazla zaman harcarsın. Bu yüzden yazı yazmak ve kod yazmak için farklı programların (ör. Microsoft Word - Visual Studio Code) olması mantıklı.

Programlayıcılar olarak zamanımızın büyük bir kısmını kod düzenleyerek geçiririz bu yüzden ihtiyaçlarınızı karşılayan bir editöre hakim olmak için harcadığınız zaman buna değecektir. İşte yeni bir editörü öğrenmek için yapmanız gerekenler:

Eğer yukarıdaki metodları takip eder, bütün metin düzenleme amaçların için kendini yeni editörü kullanmaya adarsan, zaman çizgisi bunun gibi olacaktır. İlk bir yada iki saat içerisinde dosya açma, düzenleme, kaydetme ve çıkma gibi temel editör fonksiyonlarını öğreneceksin. 20 saatlik bir kullanımdan sonra kullandığın eski editörde olduğun kadar hızlı olacaksın. Daha sonra faydalarını görmeye başlayacak, editör ile ilgili yeterli bilgiye sahip olacaksın ve kas hafızası ile kullandığın editör sana zaman kazandıracak. Modern metin editörleri havalı ve güçlüdür bu yüzden öğrenme asla sona ermez hatta daha fazla öğrendikçe hızında artacaktır.

Hangi editörü öğrenmeliyiz?

Programlayıcıların editör seçmek için çok fazla seçeneği vardır.

Günümüzde hangi editörler daha popüler? Bunun için StackOverflow anketini kontrol edebilirsiniz. Visual Studio Code en popüler editördür. Vim ise komut satırı tabanlı en popüler editördür.

Vim

Bu sınıftaki bütün eğitmenler editör olarak Vim kullanıyor. Vim zengin bir geçmişe sahiptir; Vi (1976) editöründen gelmekte ve bugün hala geliştirilmesi devam etmektedir. Vim’in arkasında gerçekten temiz fikirler var ve bu yüzden bir çok araç Vim emülasyon modunu desteklemektedir. Ör. 1,4 milyon insan Visual Studio Code için Vim emülasyonu kurmuştur. Sonunda başka bir metin editörüne geçecek olsanız bile Vim muhtemelen öğrenmeye değecektir.

Vim’in bütün fonksiyonlarını 50 dakika içerisinde öğretmek mümkün değil bu yüzden odaklanıp anlatacağımız konular şunlardır;

Vim’in Felsefesi

Programlama yaparken zamanınızın çoğunu yazmaya değil okumaya / düzenlemeye harcarsınız. Bu yüzden Vim farklı modlara sahip bir editördür: metin eklemek veya metin işlemek için farklı modlara sahiptir. Vim programlanabilir (Vimscript ve Python gibi diğer diller ile) ve Vim’in arayüzünün kendisi bir programlama dilidir. Vim, fare kullanımından kaçınır, çünkü çok yavaştır; Vim, çok fazla hareket gerektirdiği için ok tuşlarını kullanmaktan bile kaçınır.

Sonuç olarak Vim, düşündüğünüz kadar hızlı olan bir editördür.

Modal Düzenleme

Vim’in tasarımı, uzun metin akışları yazmak yerine, çok sayıda programcının zamanını; okumak, gezinmek ve küçük düzenlemeler yapmak için harcandığı fikrine dayanır. Bu nedenle Vim’in birden fazla çalışma modu vardır.

Klayve tuşlarının farklı çalışma modlarında farklı anlamları vardır. Örnek olarak, Insert modunda iken x harfine basarsak o harfi ekleyecektir ama Normal modda iken ‘x’ harfi imlecin altındaki karakteri siler ve Visual modda ise seçili olanı siler.

Varsayılan ayarlarda Vim, o anki çalışma modunu sol altta gösterir. Başlangıç modu/varsayılan mod Normal moddur. Genellikle zamanının çoğunu Normal mod ve Insert mod arasında geçireceksin. Herhangi bir moddan Normal moda geri dönmek için <ESC> tuşuna basarak modları değiştirebilirsiniz. Normal moddan i ile Insert moduna, R ile Replace moduna, v ile Visual moduna, V ile Visual Line moduna, <C-v> ile Visual Block moduna, : ile Command-line moduna girebilirsin.

Vim’i kullanırken <ESC> tuşunu çok fazla kullanırız. <ESC> tuşunu Caps Lock tuşuna atamayı düşünebilirsiniz. (macOS instructions).

Temel Öğeler

Metin Ekleme

Normal modda iken Insert moduna girmek için i tuşuna basın. Şimdi Vim, Normal moda geri dönmek için <ESC> tuşuna basana kadar diğer metin editörleri gibi çalışır. Bu bilgi ve yukarıda açıklanan temel bilgilerle birlikte, Vim’i kullanarak dosyaları düzenlemeye başlamak için ihtiyacınız olan tek şeydir (eğer bütün zamanınızı Insert Modundan düzenleme için harcıyorsanız çok da verimli değil).

Bufferlar, sekmeler ve pencereler

Vim, “buffer” adı verilen bir dizi açık dosya tutar. Bir Vim oturumunda, her biri birkaç pencere (bölünmüş bölmeler) olan bir dizi sekme bulunur. Her pencere tek bir buffer gösterir. Web tarayıcıları gibi bildiğiniz diğer programların aksine, buffferlar ve pencereler arasında bire bir haberleşme yoktur; pencereler sadece görünümdür. Belirli bir buffer, birden fazla pencerede hatta aynı sekmede bile açılabilir. Bu özellik oldukça kullanışlı olabilir örneğin bir dosyanın iki farklı parçasını aynı anda görüntüleyebilirsiniz.

Varsayılan olarak Vim, tek bir pencere içeren tek bir sekmeyle açılır.

Command-line

Command moduna Normal modda iken : yazarak giriş yapabiliriz. : Tuşuna bastığınızda bilgisayarınızın imleci ekranın altındaki komut satırına atlayacaktır. Bu mod, dosyaları açma, kaydetme, kapatma ve Vim’den çıkış yapma gibi birçok işleve sahiptir.

Vim’in arayüzü bir programlama dilidir

Vim’deki en önemli fikir Vim’in arayüzünün kendisinin bir programlama dili olmasıdır. Klavyedeki bazı tuşlar (anımsatıcı adlarla) komutlardır ve bu komutlar oluşturulabilir. Bu, özellikle komutlar kas hafızasına geçtiğinde dosya içerisinde daha verimli gezinmeler ve düzenlemeler yapılmasını sağlar.

Gezinme

Bufferda gezinmek için hareket komutlarını kullanarak zamanınızı çoğunu Normal modda geçirmelisiniz. Vim’deki hareketlere “nouns” da denir, çünkü metin parçalarına atıfta bulunurlar.

Seçim

Visual Modları:

Seçim yapmak için yön tuşlarını kullanabilirsiniz.

Düzenlemeler

Fare ile yaptığınız her şeyi artık hareket komutlarıyla oluşturulan düzenleme komutlarını kullanarak klavyeden yapabilirsiniz. İşte Vim’in arayüzünün bir programlama dili gibi görünmeye başladığı yer burası. Vim’in düzenleme komutlarına “verbs” de denir, çünkü fiiller isimler üzerine etki eder.

Sayılar

Noun’ları ve Verb’leri, belirli bir eylemi birkaç kez gerçekleştirecek bir sayı ile birleştirebilirsiniz.

Değiştiriciler

Bir noun’un anlamını değiştirmek için değiştiricileri kullanabilirsiniz. Örnek olarak, i “inside(içinde)” anlamına gelirken a “around(etraf)” anlamına gelmektedir.

Demo

Çalışmayan bir fizz buzz uygulaması:

def fizz_buzz(limit):
    for i in range(limit):
        if i % 3 == 0:
            print('fizz')
        if i % 5 == 0:
            print('fizz')
        if i % 3 and i % 5:
            print(i)

def main():
    fizz_buzz(10)

Aşağıdaki sorunları çözerek uygulamayı düzelteceğiz

Çözümü için ders videosuna bakın. Yukarıdaki değişikliklerin Vim kullanılarak nasıl yapıldığını ve başka bir program kullanarak aynı düzenlemeleri nasıl yapabileceğinizi karşılaştırın. Vim’de ne kadar az tuşa basmanız gerektiğine dikkat edin bu, düzenleme hızınızı arttırır.

Vim’i Özelleştirme

Vim, ~ / .vimrc uzantısındaki düz metin yapılandırma dosyası aracılığıyla özelleştirilir (Vimscript komutları içeren). Muhtemelen açmak istediğiniz birçok temel ayar olacaktır.

Başlangıç olarak kullanabileceğiniz, ihtiyaçlarınızı karşılayacak bir temel yapılandırma dosyası sunuyoruz. Bunu kullanmanızı öneririz, çünkü Vim’in bazı ilginç varsayılan ayarlarını düzeltir. Yapılandırma dosyamızı buradan indirip ~ / .vimrc uzantısına kaydedin.

Vim özelleştirilebilir ve özelleştirme seçeneklerini keşfetmek için zaman ayırmaya değer. İlham almak için insanların GitHub’daki dotfile dosyalarına bakabilirsiniz, örnek olarak, eğitmenlerinizin Vim yapılandırmaları (Anish, Jon (neovim kullanır), Jose). Bu konuda çok sayıda iyi blog yazıları var. İnsanların tüm yapılandırmasını kopyalayıp yapıştırmamaya çalışın, bunun yerine okuyun, anlayın ve ihtiyacınız olanı alın.

Vim’in Ekstraları

Vim’e ekstra özellikler eklemek için bir çok plugin mevcuttur. İnternette karşılaşacağınız eski tavsiyelerin aksine, Vim için bir eklenti yöneticisi kullanmanıza gerek yoktur (Vim 8.0’dan beri). Bunun yerine yerleşik paket yöneticisi sistemini kullanabilirsiniz. Sadece ~/.vim/pack/vendor/start/ dizinini oluşturun ve pluginleri buraya koyun (örnek, git clone).

Sevdiğimiz bazı pluginler:

Burada çok uzun bir plugin listesi vermekten kaçınmaya çalışıyoruz. Kullandığımız diğer pluginleri görmek için eğitmenlerin dotfile’larına (Anish, Jon, Jose) göz atabilirsiniz. Daha fazla Vim pluginleri için Vim Awesome’a göz atın. Bu konuda da çok sayıda blog yazısı var: “en iyi Vim pluginleri” şeklinde aratarak bulabilirsiniz.

Diğer Programlarda Vim-modu

Birçok araç Vim emülasyonunu destekliyor. Araca bağlı olarak kalitesi iyiden harikaya değişir. Havalı Vim özelliklerini desteklemeyebilir ama çoğu temel özellik gayet iyi bir şekilde çalışır.

Shell

Bir Bash kullanıcısıysanız, set -o vi kullanın. Zsh kullanıyorsanız, bindkey -v. Fish için,fish_vi_key_bindings. Ayrıca, hangi shelli kullanırsanız kullanın, export EDITOR=vim komutu ile dışa aktarabilirsiniz. Bu, bir program editörü başlatmak istediğinde hangi editörü başlatılacağına karar vermek için kullanılan ortam değişkenidir. Örneğin git, commit mesajları için bu editörü kullanacaktır.

Readline

Birçok program, komut satırı arabirimleri için GNUReadline kütüphanesini kullanır. Readline (temel) Vim emülasyonu da destekler ~/.inputrc dosyasına aşağıdaki satırı ekleyerek etkinleştirebilirsin.

set editing-mode vi

Örneğin bu ayar ile Python REPL, Vim bindinglerini destekleyecektir.

Diğerleri

Web tarayıcıları için vim keybinding uzantıları bile vardır - bunlardan bazı popüler olanlar Google Chrome için Vimium ve Firefox için Tridactyl’dir. Vim bindinglerini Jupyter notebookdan bile alabilirsiniz.

Gelişmiş Vim

İşte size editörün gücünü gösteren birkaç örnek. Size bu tür şeylerin hepsini öğretemeyiz, ama siz ilerlemeye devam ettikce öğreneceksiniz. Ne zaman “bunu yapmanın daha iyi bir yolu olmalı” diye düşünürseniz internette araştırın çünkü muhtemelen bulacaksınız.

Bul ve Değiştir

:s (substitute) komutu (dokümantasyon).

Çoklu Pencere

Makrolar

Kaynaklar

Egzersizler

  1. vimtutor‘u tamamla. Not: en iyi 80x24
    terminalde gözükür. (24 satıra 80 sütun)
  2. Bizim basic vimrc’mizi indir ve ~/.vimrc uzantısına kaydet. İyi dokümente edilmiş dosyayı okuyun (Vim kullanarak!) ve Vim’in yeni ayarlar ile nasıl farklı göründüğünü, farklı davrandığını gözlemleyin.
  3. Bir plugin kurma ve yapılandırma: ctrlp.vim.
    1. mkdir -p ~/.vim/pack/vendor/start komutu ile plugin dizini oluşturun
    2. Plugin indirin: cd ~/.vim/pack/vendor/start; git clone https://github.com/ctrlpvim/ctrlp.vim
    3. Plugin için dokümantasyonu okuyun. Bir proje dizininde dosya bulmak, Vim’i açmak ve Vim komut satırını kullanarak CtrlP’yi başlatmak (:CtrlP) için CtrlP’yi kullanmayı deneyin.
    4. konfigürasyon’u ~/.vimrc‘nize ekleyerek CtrlP’yi özelleştirin. CtrlP’yi açmak için Ctrl-P ye basın.
  4. Vim’de pratik yapmak için derste gösterdiğimiz Demo’yu kendi bilgisayarınızda tekrar yapın.
  5. Önümüzdeki bir ay bütün metin düzenleme işleri için Vim’i kullanın. Bir şey verimsiz göründüğünde veya “daha iyi bir yol olmalı” diye düşündüğünüzde Google’da aratmayı deneyin, muhtemelen vardır. Eğer takıldığınız yer olursa ofis saatleri içerisinde yanımıza uğrayın yada bize mail gönderin.
  6. Vim bindinglerini kullanmak için diğer araçlarını konfigüre et (yukarıdaki talimatlara bakın).
  7. ~/.vimrc‘nizi daha da özelleştirin ve daha fazla plugin yükleyin.
  8. (İleri düzey) Vim makrolarını kullanarak XML’den JSON’a dönüştürün (örnek dosya). Kendi başına yapmayı dene, eğer takılırsan yukarıdaki makrolar bölümüne bakabilirsin.

Bu sayfayı düzenle.

CC BY-NC-SA lisansı ile lisanslanmıştır.