---
category: tool
tool: vim
contributors:
    - ["RadhikaG", "https://github.com/RadhikaG"]
filename: LearnVim.txt
---


[Vim](http://www.vim.org)
To (Vi IMproved) είναι ένας κλώνος του δημοφιλούς vi editor για Unix.
Είναι ένας text editor σχεδιασμένος για ταχύτητα και αυξημένη παραγωγικότητα,
και υπάρχει σχεδόν σε όλα τα Unix-based συστήματα. Έχει διάφορα keybindings
(συντομεύσεις πλήκτρων) για να πλοηγούμαστε γρήγορα σε συγκεκριμένα σημεία ενός αρχείου,
καθώς και για γρήγορη επεξεργασία.

## Τα βασικά της πλοήγησης στον Vim

```
    vim <filename>   # Άνοιξε το <filename> στον vim
    :help <topic>    # Άνοιξε το built-in βοήθημα για το <topic> αν υπάρχει
    :q               # Βγες από τον vim
    :w               # Αποθήκευσε το τρέχον αρχείο
    :wq              # Αποθήκευσε το τρέχον αρχείο και βγες από τον vim
    ZZ               # Αποθήκευσε το τρέχον αρχείο και βγες από τον vim
    :q!              # Βγες χωρίς αποθήκευση
                     # ! *αναγκάζει* το :q να εκτελεστεί, γι αυτό βγαίνει χωρίς saving
    :x               # Ίδιο με το wq αλλά πιο σύντομο

    u                # Undo
    CTRL+R           # Redo

    h                # Μετακινήσου κατά ένα χαρακτήρα αριστερά
    j                # Μετακινήσου μια γραμμή κάτω
    k                # Μετακινήσου μια γραμμή πάνω
    l                # Μετακινήσου μια γραμμή δεξιά

    Ctrl+B 	         # Πήγαινε μία οθόνη πίσω
    Ctrl+F 	         # Πήγαινε μία οθόνη μπροστά
    Ctrl+U           # Πήγαινε μισή οθόνη πίσω
    Ctrl+D 	         # Πήγαινε μισή οθόνη μπροστά

    # Μετακινήσεις στην ίδια γραμμή

    0                # Πήγαινε στην αρχή της γραμμής
    $                # Πήγαινε στο τέλος της γραμμής
    ^                # Πήγαινε στον πρώτο μη κενό χαρακτήρα της γραμμής

    # Αναζήτηση στο κείμενο

    /word            # Υπογραμμίζει όλες τις εμφανίσεις της λέξης μετά τον cursor
    ?word            # Υπογραμμίζει όλες τις εμφανίσεις της λέξης πριν τον cursor
    n                # Μετακινεί τον cursor στην επόμενη εμφάνιση της λέξης
    N                # Μετακινεί τον cursor στην προηγούμενη εμφάνιση της λέξης

    :%s/foo/bar/g    # άλλαξε το 'foo' σε 'bar' σε κάθε γραμμή του αρχείου
    :s/foo/bar/g     # άλλαξε το 'foo' σε 'bar' στην τρέχουσα γραμμή

    # Άλματα σε χαρακτήρες

    f<character>     # Άλμα μπροστά και προσγείωση στο επόμενο <character>
    t<character>     # Άλμα μπροστά και προσγείωση αμέσως πριν το προηγούμενο <character>

    # Για παράδειγμα,
    f<               # Άλμα μπροστά και προσγείωση σε <
    t<               # Άλμα μπροστά και προσγείωση αμέσως πριν <

    # Μετακινήσεις κατά λέξεις

    w                # Πήγαινε μια λέξη μπροστά
    b                # Πήγαινε μια λέξη πίσω
    e                # Πήγαινε στο τέλος της λέξης στην οποία είσαι

    # Άλλοι χαρακτήρες για να τριγυρνάμε

    gg               # Πήγαινε στην αρχή του αρχείου
    G                # Πήγαινε στο τέλος του αρχείου
    :NUM             # Πήγαινε στη γραμμή με αριθμό NUM (οποιοσδήποτε αριθμός)
    H                # Πήγαινε στην κορυφή της σελίδας
    M                # Πήγαινε στην μέση της σελίδας
    L                # Πήγαινε στο κάτω άκρο της σελίδας
```

## Help docs:
Το Vim έχει built-in help documentation που μπορείς να δεις με `:help <topic>`.
Για παράδειγμα το `:help navigation` θα σου εμφανίσει documentation σχετικό με
το πως να πλοηγείσαι στο αρχείο!

To `:help` μπορεί να χρησιμοποιηθεί και χωρίς option. Αυτό θα εμφανίσει το default
help dialog που σκοπεύει να κάνει το vim πιο προσιτό σε αρχάριους!

## Modes:

O Vim στηρίζεται στο concept των **modes**.

- Command Mode -  ο vim εκκινεί σε αυτό mode, χρησιμοποιείται για πλοήγηση και εντολές
- Insert Mode  - χρησιμοποιείται για να κάνουμε αλλαγές στα αρχεία
- Visual Mode  - χρησιμοποιείται για να υπογραμμίζουμε κείμενα και να κάνουμε διάφορα σε αυτά
- Ex Mode      - χρησιμοποιείται για να πάμε στο κάτω μέρος με το ':' που δίνουμε εντολές

```
    i                # Βάζει το vim σε insert mode, πριν τη θέση cursor
    a                # Βάζει το vim σε insert mode, μετά τη θέση cursor
    v                # βάζει τον vim σε visual mode
    :                # Βάζει τον vim σε ex mode
    <esc>            # φεύγει από όποιο mode είμαστε και πάει σε command mode

    # Αντιγραφή-Επικόληση κειμένου

    y                # Yank (κάνε copy) ό,τι είναι επιλεγμένο
    yy               # Yank την γραμμή στην οποία είσαι
    d                # διάγραψε ό,τι είναι επιλεγμένο
    dd               # Διάγραψε τη γραμμή στην οποία είσαι
    p                # Κάνε Paste το αντεγραμένο κείμενο μετά την θέση του cursor
    P                # Κάνε Paste το αντεγραμένο κείμενο πριν την θέση του cursor
    x                # Διάγραψε τον χαρακτήρα που είναι κάτω από τον cursor
```

## Η 'γραμματική' του Vim

Μπορείς να σκεφτείς τον Vim ως ένα σύνολο εντολών
σε μορφή 'Verb-Modifier-Noun', όπου

- Verb     - η ενέργεια που θες να κάνεις
- Modifier - πώς κάνεις την ενέργεια
- Noun     - το αντικείμενο που δέχεται την ενέργεια

Μερικά παραδείγματα ''Ρημάτων', 'Modifiers' και 'Ουσιαστικών':

```
    # 'Ρήματα'

    d                # Διάγραψε
    c                # Άλλαξε
    y                # Yank (αντίγραψε)
    v                # Επίλεξε οπτικά

    # 'Modifiers'

    i                # Μέσα
    a                # Γύρω
    NUM              # Αριθμός (NUM = οποιοσδήποτε αριθμός)
    f                # Ψάξε κάτι και πήγαινε εκεί που βρίσκεται
    t                # Ψάξε κάτι και πήγαινε πριν από εκεί που βρίσκεται
    /                # Βρες κάποιο string μετά από τον cursor
    ?                # Βρες κάποιο string πριν τον cursor

    # 'Ουσιαστικά'

    w                # Λέξη
    s                # Πρόταση
    p                # Παράγραφος
    b                # Block

    # Δείγματα 'προτάσεων' ή εντολών

    d2w              # Διάγραψε 2 λέξεις
    cis              # Άλλαξε μέσα στην πρώταση
    yip              # Αντίγραψε την παράγραφο στην οποία βρίσκεσαι
    ct<              # Άλλαξε σε <
                     # Άλλαξε το κείμενο από το οποίο είσαι πριν το επόμενο bracketChange the text from where you are to the next open bracket
    d$               # Διάγραψε μέχρι το τέλος της γραμμής
```

## Μερικά shortcuts και κόλπα

        <!--TODO: Βάλτε κι άλλα!-->
```
    >                # Στοίχισε προς τα δεξιά την επιλογή σου κατά ένα block
    <                # Στοίχισε προς τα αριστερά την επιλογή σου κατά ένα block
    :earlier 15m     # Κάνε το αρχείο όπως ήταν πριν 15 λεπτά
    :later 15m       # Ακύρωση για την παραπάνω εντολή
    ddp              # Αντάλλαξε τις θέσεις διαδοχικών γραμμών
    .                # Επανάλαβε την προηγούμενη ενέργεια
    :w !sudo tee %   # Σώσε το τρέχον αρχείο ως root
    :set syntax=c    # Κάνε syntax highlighting για τη γλώσσα c
    :sort            # Ταξινόμησε όλες τις γραμμές
    :sort!           # Ταξινόμησε ανάποδα όλες τις γραμμές (αύξουσα σειρά)
    :sort u          # Ταξινόμησε όλες τις γραμμές και διάγραψε τις διπλές γραμμές
    ~                # Άλλαξε τα κεφαλαία σε μικρά στο επιλεγμένο κείμενο
    u                # Το επιλεγμένο κείμενο να γίνει πεζά γράμματα
    U                # Το επιλεγμένο κείμενο να γίνει κεφαλαία γράμματα

    # Fold text
    zf               # Διπλώνει (συμπιέζει τις γραμμές σε μία) το επιλεγμένο κείμενο
    zo               # Ξεδιπλώνει το επιλεγμένο fold
    zc               # Κλείνει το επιλεγμένο fold
    zR               # Ανοίγει όλα τα folds
    zM               # Κλείνει όλα τα folds
```

## Macros

Τα macros βασικά είναι καταγραφή ενεργειών.
Όταν ξεικάς να καταγράφεις ένα macro καταγράφονται **όλες** οι ενέργεις και οι
εντολές που χρησιμοποιείς, μέχρι να σταματήσεις την καταγραφή. Όταν καλείς ένα macro,
εκτελείται πάλι η ίδια σειρά από ενέργειες και εντολές στο επιλεγμένο κείμενο.

```
    qa               # Ξεκίνα να καταγράφεις ένα macro που θα ονομαστεί 'a'
    q                # Σταμάτα την καταγραφή
    @a               # Τρέξε το macro
```

### Configuring ~/.vimrc

Το αρχείο .vimrc μπορεί να χρησιμοποιηθεί για να κάνεις configure το Vim στο startup.

Εδώ βλέπουμε δείγμα ενός ~/.vimrc file:

```
" Example ~/.vimrc
" 2015.10

" Required for vim to be iMproved
set nocompatible

" Determines filetype from name to allow intelligent auto-indenting, etc.
filetype indent plugin on

" Enable syntax highlighting
syntax on

" Better command-line completion
set wildmenu

" Use case insensitive search except when using capital letters
set ignorecase
set smartcase

" When opening a new line and no file-specific indenting is enabled,
" keep same indent as the line you're currently on
set autoindent

" Display line numbers on the left
set number

" Indentation options, change according to personal preference

" Number of visual spaces per TAB
set tabstop=4

" Number of spaces in TAB when editing
set softtabstop=4

" Number of spaces indented when reindent operations (>> and <<) are used
set shiftwidth=4

" Convert TABs to spaces
set expandtab

" Enable intelligent tabbing and spacing for indentation and alignment
set smarttab
```

### Αναφορές

[Vim | Home](http://www.vim.org/index.php)

`$ vimtutor`

[A vim Tutorial and Primer](https://danielmiessler.com/study/vim/)

[What are the dark corners of Vim your mom never told you about? (Stack Overflow thread)](http://stackoverflow.com/questions/726894/what-are-the-dark-corners-of-vim-your-mom-never-told-you-about)

[Arch Linux Wiki](https://wiki.archlinux.org/index.php/Vim)
