# vi

vi, terminalde çok satırlı düzenleme yapabilen metin editörlerinin atalarından birisi olarak görülür. 2009'da yapılan bir anket Linux üzerine kullanılan en yaygın metin editörünün %36 ile vi olduğunu göstermektedir. Kompleks işlemleri destekleyen ve hemen her sistemde önyüklü olarak gelen vi haricinde bir diğer popüler metin editörü ise emacs'tir.

## Tarihçe

vi editörü aslında oldukça eskiye dayanan bir takım editörlerin evrilmesiyle ortaya çıkmıştır. Editörün çıkış noktası *ed* isimli editördür. *ed* Ken Thompson tarafından UNIX işletim sisteminin üç temel yapı taşından biri olarak geliştirilmiştir: assembler, editör ve shell.

*ed*'in kullanımı zamanla pek "pratik" bulunmadığından, "ölümsüzler" (immortals) tarafından kullanılabileceği espirisiyle, "ölümlüler" (mortals) için *em* geliştirildi: *editor for mortals*. *em*'nin görece yaygınlaşmasının ardından Bill Joy ve Chuck Haley kodu kendilerince şekillendirip *en* isimli bir versiyonunu geliştirdiler. Daha sonra Bill Joy tek başına *en*'yi "extend" edip *ex*'i piyasaya sürdü. *ex*'e eklenen tam-ekran görsel modu, metin editörlerinin dönüm noktası oldu. Her ne kadar bu fikir piyasadaki başka yazılımlardan alınmış olsa da, en yaygın kullanıma ulaşanı kendisi olmuştu. Zamanla *ex*'in görsel modu *(visual mode)* o kadar çok kullanıldı ki, doğrudan *vi* komutu ile *ex* programı tam-ekran görsel modunda çalıştırılır oldu.

Yıllar sonra Bram Moolenaar tarafından *vi* kodu geliştirildi ve **vim** (*Vi IMproved*) ortaya çıktı. `vim`, `vi`'ın tüm özelliklerini içerirken, üzerine sözdizimi renklendirme (syntax highlighting), çoklu geri alma (undo), görsel mod (visual mode), eklenti desteği gibi birçok modern özellik eklemiştir. Günümüzde çoğu Linux dağıtımında `vi` komutu aslında `vim`'in daha kısıtlı bir modda çalışan halini veya doğrudan `vim`'i çalıştırır. Bu nedenle, genellikle `vim`'in sunduğu gelişmiş özelliklerden faydalanmak daha pratiktir. Örneklerimizde `vim`'i temel alacağız.

Çoğu sistemde `vim` önyüklü gelir. Eğer kurulu değilse, dağıtımınızın paket yöneticisi ile kolayca kurabilirsiniz:

```bash
# Debian/Ubuntu tabanlı sistemler:
sudo apt update && sudo apt install vim

# RHEL/CentOS/Fedora tabanlı sistemler:
sudo dnf install vim 
# veya eski sürümlerde:
# sudo yum install vim 
```

## Çalışma Modları

vi'ın bir takım çalışma modları vardır, bu aslında *ed*'den kalan bir alışkanlıktır. vi ilk çalıştırıldığında *komut* modunda bulunur, *düzenleme* moduna geçmek için ayrıca işlem yapmanız gerekir. *komut* modundayken tuşlara basarsanız yazı yazamazsınız, ancak kopyalama, silme, dosya içinde gezinme benzeri işlemleri gerçekleştirebilirsiniz.

Dosyamızı `vi` (veya `vim`) ile aşağıdaki gibi açtığımızda, varsayılan olarak \_Komut Modu\_nda başlarız.

```bash
vim crc8.py 
```

*Komut Modu*'ndan *Düzenleme (Insert) Modu*'na geçmek için çeşitli tuşlar kullanılır:

* **i**: İmlecin bulunduğu yerden itibaren eklemeye başlar (insert).
* **a**: İmlecin bulunduğu karakterden *sonra* eklemeye başlar (append).
* **I**: Satırın başına geçer ve eklemeye başlar.
* **A**: Satırın sonuna geçer ve eklemeye başlar.
* **o**: İmlecin bulunduğu satırın *altına* yeni bir boş satır açar ve ekleme moduna geçer.
* **O**: İmlecin bulunduğu satırın *üstüne* yeni bir boş satır açar ve ekleme moduna geçer.

Düzenleme moduna geçtiğinizde, terminalin en alt satırında genellikle **-- INSERT --** veya **-- EKLE --** gibi bir ibare belirir. Bu modda klavyeden yazdıklarınız doğrudan dosyaya eklenir.

Düzenleme modundan çıkıp tekrar *Komut Modu*'na dönmek için klavyenizdeki **ESC** tuşuna basmanız gerekir. **-- INSERT --** yazısı kaybolacaktır. Tüm temel komutlar, silme, kopyalama, yapıştırma işlemleri *Komut Modu*'nda yapılır.

## Temel Komutlar (Komut Modu)

Aşağıdaki komutlar *Komut Modu*'nda iken çalışır. Bazıları doğrudan harf tuşları ile, bazıları ise `:` karakteri ile başlar.

**Çıkış ve Kaydetme:**

* **:q** : Değişiklik yapılmadıysa çıkar (quit).
* **:q!** : Değişiklikleri kaydetmeden çıkmaya zorlar.
* **:w** : Dosyayı kaydeder (write).
* **:wq** veya **:x** veya **ZZ** (Shift+Z iki kere): Dosyayı kaydedip çıkar.
* **:w yeni\_dosya\_adi** : Dosyayı farklı bir isimle kaydeder.

**Navigasyon (Gezinme):**

* **h, j, k, l**: Sol, aşağı, yukarı, sağ yön tuşları gibi çalışır.
* **w**: Sonraki kelimenin başına gider.
* **b**: Önceki kelimenin başına gider.
* **0** (sıfır): Satırın başına gider.
* **$**: Satırın sonuna gider.
* **^**: Satırın başındaki ilk karaktere (boşluk olmayan) gider.
* **gg**: Dosyanın başına gider.
* **G** (Shift+g): Dosyanın sonuna gider.
* **:N** (N bir sayı): N numaralı satıra gider (örneğin `:17`).
* **Ctrl+f**: Bir sayfa aşağı gider (forward).
* **Ctrl+b**: Bir sayfa yukarı gider (backward).

**Silme:**

* **x**: İmlecin üzerindeki karakteri siler.
* **dw**: İmleçten kelimenin sonuna kadar siler (delete word).
* **dd**: İmlecin bulunduğu satırı tamamen siler.
* **D** (Shift+d) veya **d$**: İmleçten satır sonuna kadar siler.

**Kopyalama ve Yapıştırma:**

* **yw**: İmleçten kelimenin sonuna kadar kopyalar (yank word).
* **yy** veya **Y** (Shift+y): İmlecin bulunduğu satırı tamamen kopyalar.
* **p**: Kopyalanan veya silinen metni imleçten *sonra* yapıştırır (paste).
* **P** (Shift+p): Kopyalanan veya silinen metni imleçten *önce* yapıştırır.

**Geri Alma / Yineleme:**

* **u**: Son yapılan değişikliği geri alır (undo).
* **Ctrl+r**: Geri alınan değişikliği yineler (redo).

**Arama:**

* **/aranacak\_metin**: İmleçten itibaren ileriye doğru metin arar. `n` tuşu sonraki eşleşmeye, `N` tuşu önceki eşleşmeye gider.
* **?aranacak\_metin**: İmleçten itibaren geriye doğru metin arar. `n` ve `N` tuşları aynı şekilde çalışır.

**Diğer Modlar:**

* **v**: Görsel Moda (Visual Mode) geçer. Ok tuşları veya navigasyon komutları ile metin seçilebilir. Seçilen metin üzerinde silme (`d`), kopyalama (`y`) gibi işlemler yapılabilir.
* **V** (Shift+v): Satır bazında Görsel Moda geçer.
* **Ctrl+v**: Blok bazında Görsel Moda geçer (dikdörtgen seçim).

**Ayarlar (:** ile başlayan komutlar):

* **:set number** veya **:set nu**: Satır numaralarını gösterir.
* **:set nonumber** veya **:set nonu**: Satır numaralarını gizler.
* **:set hlsearch**: Arama sonuçlarını vurgular.
* **:set nohlsearch**: Arama vurgusunu kaldırır.
* **:syntax on**: Sözdizimi renklendirmeyi açar (genellikle varsayılan olarak açıktır).
* **:syntax off**: Sözdizimi renklendirmeyi kapatır.

**Pencere Yönetimi (:** ile başlayan komutlar):

* **:split** veya **:sp**: Ekranı yatay olarak ikiye böler, aynı dosyayı gösterir.
* **:vsplit** veya **:vsp**: Ekranı dikey olarak ikiye böler, aynı dosyayı gösterir.
* **:sp dosya\_adi**: Ekranı yatay böler ve yeni pencerede belirtilen dosyayı açar.
* **:vsp dosya\_adi**: Ekranı dikey böler ve yeni pencerede belirtilen dosyayı açar.
* **:new**: Yeni boş bir pencere açar.
* **Ctrl+w Ctrl+w** veya **Ctrl+w w**: Pencereler arasında geçiş yapar.
* **Ctrl+w h/j/k/l**: Yön tuşlarına göre pencereler arasında geçiş yapar.
* **:q** (pencere içindeyken): Aktif pencereyi kapatır.
* **:only**: Aktif pencere dışındaki tüm pencereleri kapatır.

Bu komutlar `vim`'in temel kullanımını kapsar. `vim` çok daha fazla özelliğe ve komuta sahiptir. Daha fazla bilgi için komut modundayken `:help` yazarak `vim`'in kendi yardım sistemine başvurabilirsiniz veya `vimtutor` komutunu çalıştırarak interaktif bir eğitim alabilirsiniz.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://linux-yonetimi.veriteknik.net.tr/temel-komutlar/dosya-duezenleme-araclari/vi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
