diff options
Diffstat (limited to 'el-gr')
| -rw-r--r-- | el-gr/bash-gr.html.markdown | 2 | ||||
| -rw-r--r-- | el-gr/rust-gr.html.markdown | 339 | ||||
| -rw-r--r-- | el-gr/vim-gr.html.markdown | 267 | 
3 files changed, 607 insertions, 1 deletions
| diff --git a/el-gr/bash-gr.html.markdown b/el-gr/bash-gr.html.markdown index 2989969d..239beaa4 100644 --- a/el-gr/bash-gr.html.markdown +++ b/el-gr/bash-gr.html.markdown @@ -8,7 +8,7 @@ lang: el-gr  ---  Η λέξη «bash» είναι ένα από τα ονόματα του unix shell (τερματικός), το οποίο -διανέμεται επίσης ως προεπιλεγμένος τερματικός για το λειτουργικό σύστημα GNU, τα Linux και τα Mac OS X. +διανέμεται επίσης ως προεπιλεγμένος τερματικός για το λειτουργικό σύστημα GNU, τα Linux και τα macOS.  Σχεδόν όλα τα παραδείγματα που ακολουθούν μπορούν να αποτελέσουν μέρος ενός  προγράμματος τερματικού (shell script) ή να εκτελεσθούν απευθείας από τον  τερματικό. diff --git a/el-gr/rust-gr.html.markdown b/el-gr/rust-gr.html.markdown new file mode 100644 index 00000000..79f210ac --- /dev/null +++ b/el-gr/rust-gr.html.markdown @@ -0,0 +1,339 @@ +--- +language: Rust +contributors: +    - ["P1start", "http://p1start.github.io/"] +    - ["Dimitri Kokkonis", "https://github.com/kokkonisd"] +filename: learnrust-gr.rs +lang: el-gr +--- + +_[ΣτΜ.: οι όροι "χαμηλό/υψηλό επίπεδο" αναφέρονται στην εγγύτητα μιας γλώσσας προγραμματισμού ή γενικότερα ενός +στοιχείου στην "μηχανή", ή το υλικό του υπολογιστή. Για παράδειγμα, η φράση "η C είναι μια γλώσσα χαμηλού επιπέδου" +αναφέρεται στο γεγονός ότι η C επιτρέπει άμεση και λεπτομερή διαχείρηση μνήμης, και πιο άμεσο έλεγχο του επεξεργαστή· +σε καμία περίπτωση δεν σημαίνει ότι η C έχει λιγότερες δυνατότητες, και γενικότερα δεν φέρει αρνητική σημασία.]_ + +Η Rust είναι μια γλώσσα προγραμματισμού ανεπτυγμένη από την Mozilla Research. +Συνδυάζει τον έλεγχο της απόδοσης χαμηλού επιπέδου με διευκολύνσεις και ασφάλεια υψηλού επιπέδου. + +Πετυχαίνει αυτούς τους στόχους χωρίς να χρειάζεται garbage collector ή runtime, το οποίο καθιστά δυνατή τη χρήση +βιβλιοθηκών της Rust ως αντικατάσταση της C. + +Η έκδοση 0.1 (η πρώτη της Rust) δημοσιεύθηκε τον Ιανουάριο του 2012, και για τα επόμενα 3 χρόνια η ανάπτυξή της +εξελίχθηκε τόσο γρήγορα που, μέχρι πρότινος, προτείνονταν η χρήση μη-σταθερών εκδόσεων (nightly builds) αντί σταθερών +εκδόσεων.  + +Τις 15 Μαΐου 2015 δημοσιεύτηκε η εκδοχή 1.0 της Rust, με πλήρη εγγύηση συμβατότητας με προηγούμενες εκδοχές. Οι +μη-σταθερές εκδόσεις συνήθως περιλαμβάνουν γρηγορότερους χρόνους μεταγλώττισης και γενικότερες βελτιώσεις όσον αφορά +τον μεταγλωττιστή. Η μέθοδος [train release](https://www.plutora.com/blog/agile-release-train) χρησιμοποιείται, με +συστηματικές εκδόσεις να δημοσιεύονται κάθε έξι εβδομάδες. Η beta έκδοση της Rust 1.1 δημοσιεύθηκε ταυτοχρόνως με την +σταθερή έκδοση 1.0. + +Αν και η Rust είναι μια γλώσσα σχετικά χαμηλού επιπέδου, ο σχεδιασμός της περιλαμβάνει κάποιες έννοιες που συναντώνται +συνχότερα σε γλώσσες υψηλού επιπέδου. Αυτό καθιστά την Rust γρήγορη και αποδοτική αλλά επίσης εύκολη και προσβάσιμη. + + +```rust +// Αυτό είναι ένα σχόλιο. Τα σχόλια μίας γραμμής γράφονται έτσι... +// Και επεκτείνονται σε περισσότερες από μία γραμμές έτσι. + +/// Τα σχόλια documentation γράφονται έτσι, και υποστηρίζουν markdown. +/// # Παράδειγμα +///  +/// ``` +/// let five = 5 +/// ``` + +////////////////////// +// 1. Βασικές αρχές // +////////////////////// + +#[allow(dead_code)] +// Συναρτήσεις +// `i32` είναι ο τύπος που αντιστοιχεί στους 32-bit signed ακέραιους +fn add2(x: i32, y: i32) -> i32 { +    // Έμεσα εννοούμενη επιστροφή του αποτελέσματος, χωρίς semicolon (;) +    x + y +} + +#[allow(unused_variables)] +#[allow(unused_assignments)] +#[allow(dead_code)] +// Συνάρτηση main +fn main() { +    // Αριθμοί // + +    // Αμετάβλητη σύνδεση +    let x: i32 = 1; + +    // Καταλήξεις integer/float +    let y: i32 = 13i32; +    let f: f64 = 1.3f64; + +    // Εξακρίβωση τύπου (type inference) +    // Τις περισσότερες φορες ο μεταγλωττιστής της Rust μπορεί να εξακριβώσει τον τύπο μιας μεταβλητής, επομένως δεν +    // χρειάζεται ο προγραμματιστής να τον δηλώνει ρητά. +    // Σε αυτό το tutorial, οι τύποι δηλώνονται ρητά σε διάφορα σημεία, αλλά μόνο προκειμένου να είναι πιο ευανάγνωστος +    // ο κώδικας. Ο μεταγλωττιστής μπορεί να το διαχειριστεί αυτόματα στις περισσότερες περιπτώσεις. +    let implicit_x = 1; +    let implicit_f = 1.3; + +    // Πράξεις +    let sum = x + y + 13; + +    // Μη-αμετάβλητη αξία (με την έννοια ότι μπορεί να αλλάξει) +    let mut mutable = 1; +    mutable = 4; +    mutable += 2; + +    // Αλφαριθμητικά // + +    // Σταθερά αλφαριθμητικά +    let x: &str = "καλημέρα κόσμε!"; + +    // Εκτύπωση αλφαριθμητικών +    println!("{} {}", f, x); // 1.3 καλημέρα κόσμε! + +    // A `String` – a heap-allocated string +    let s: String = "καλημέρα κόσμε".to_string(); + +    // Ένα κομμάτι αλφαριθμητικού (string slice) – μια μη-μεταβλητή οπτική γωνία προς ένα άλλο αλφαριθμητικό +    // Το αλφαριθμητικό μπορεί να είναι στατικό όπως τα σταθερά αλφαριθμητικά, ή να περιλαμβάνεται σε ένα άλλο, +    // δυναμικό αντικείμενο (σε αυτή την περίπτωση τη μεταβλητή `s`) +    let s_slice: &str = &s; + +    println!("{} {}", s, s_slice); // καλημέρα κόσμε καλημέρα κόσμε + +    // Διανύσματα/πίνακες // + +    // Πίνακας σταθερού μεγέθους +    let four_ints: [i32; 4] = [1, 2, 3, 4]; + +    // Δυναμικός πίνακας (διάνυσμα) +    let mut vector: Vec<i32> = vec![1, 2, 3, 4]; +    vector.push(5); + +    // Ένα κομμάτι – μια μη-μεταβλητή οπτική γωνία προς ένα διάνυσμα ή πίνακα +    // Είναι παρόμοιο με το κομμάτι αλφαριθμητικού που είδαμε προηγουμένως +    let slice: &[i32] = &vector; + +    // Μπορούμε να χρησιμοποιήσουμε το `{:?}` για να εκτυπώσουμε κάτι σε στυλ debug +    println!("{:?} {:?}", vector, slice); // [1, 2, 3, 4, 5] [1, 2, 3, 4, 5] + +    // Tuples (πλειάδες) // + +    // Ένα tuple είναι μια σταθερού μεγέθους σειρά από αξίες (πιθανά διαφορετικού τύπου) +    let x: (i32, &str, f64) = (1, "καλημέρα", 3.4); + +    // Μπορούμε να χρησιμοποιήσουμε το `let` και ένα tuple για να δώσουμε πολλές αξίες σε πολλές μεταβλητές ταυτόχρονα +    // (destructuring `let`) +    let (a, b, c) = x; +    println!("{} {} {}", a, b, c); // 1 καλημέρα 3.4 + +    // Μπορούμε επίσης να επιλέξουμε ένα συγκεκριμένο στοιχείο από ένα tuple +    println!("{}", x.1); // καλημέρα + +    ////////////// +    // 2. Τύποι // +    ////////////// + +    // Δομή +    struct Point { +        x: i32, +        y: i32, +    } + +    let origin: Point = Point { x: 0, y: 0 }; + +    // Μια δομή με ανώνυμα πεδία, ή αλλιώς μια `δομή tuple` (`tuple struct`) +    struct Point2(i32, i32); + +    let origin2 = Point2(0, 0); + +    // Enum, όπως στην C +    enum Direction { +        Left, +        Right, +        Up, +        Down, +    } + +    let up = Direction::Up; + +    // Enum με πεδία +    enum OptionalI32 { +        AnI32(i32), +        Nothing, +    } + +    let two: OptionalI32 = OptionalI32::AnI32(2); +    let nothing = OptionalI32::Nothing; + +    // Γενικότητα (genericity) // + +    struct Foo<T> { bar: T } + +    // Αυτό ορίζεται στην standard library ως `Option` +    enum Optional<T> { +        SomeVal(T), +        NoVal, +    } + +    // Μέθοδοι // + +    impl<T> Foo<T> { +        // Οι μέθοδοι παίρνουν πάντα μια ρητή παράμετρο `self` +        fn bar(&self) -> &T { // Δανειζόμαστε το self +            &self.bar +        } +        fn bar_mut(&mut self) -> &mut T { // Δανειζόμαστε το self ως μη-αμετάβλητη αξία +            &mut self.bar +        } +        fn into_bar(self) -> T { // Εδώ το self καταναλώνεται +            self.bar +        } +    } + +    let a_foo = Foo { bar: 1 }; +    println!("{}", a_foo.bar()); // 1 + +    // Χαρακτηρηστικά (traits) (γνωστά ως interfaces ή typeclasses σε άλλες γλώσσες) // + +    trait Frobnicate<T> { +        fn frobnicate(self) -> Option<T>; +    } + +    impl<T> Frobnicate<T> for Foo<T> { +        fn frobnicate(self) -> Option<T> { +            Some(self.bar) +        } +    } + +    let another_foo = Foo { bar: 1 }; +    println!("{:?}", another_foo.frobnicate()); // Some(1) + +    ////////////////////////////////////////////////// +    // 3. Αντιστοιχίσεις Μοτίβων (Pattern Matching) // +    ////////////////////////////////////////////////// + +    let foo = OptionalI32::AnI32(1); +    match foo { +        OptionalI32::AnI32(n) => println!("Είναι ένα i32: {}", n), +        OptionalI32::Nothing  => println!("Δεν είναι τίποτα!"), +    } + +    // Προχωρημένο pattern matching +    struct FooBar { x: i32, y: OptionalI32 } +    let bar = FooBar { x: 15, y: OptionalI32::AnI32(32) }; + +    match bar { +        FooBar { x: 0, y: OptionalI32::AnI32(0) } => +            println!("Οι αριθμοί είναι μηδέν!"), +        FooBar { x: n, y: OptionalI32::AnI32(m) } if n == m => +            println!("Οι αριθμοί είναι οι ίδιοι"), +        FooBar { x: n, y: OptionalI32::AnI32(m) } => +            println!("Διαφορετικοί αριθμοί: {} {}", n, m), +        FooBar { x: _, y: OptionalI32::Nothing } => +            println!("Ο δεύτερος αριθμός δεν είναι τίποτα!"), +    } + +    ///////////////////// +    // 4. Έλεγχος ροής // +    ///////////////////// + +    // Βρόγχοι `for` +    let array = [1, 2, 3]; +    for i in array.iter() { +        println!("{}", i); +    } + +    // Διαστήματα +    for i in 0u32..10 { +        print!("{} ", i); +    } +    println!(""); +    // Τυπώνει `0 1 2 3 4 5 6 7 8 9 ` + +    // Βρόγχοι `if` +    if 1 == 1 { +        println!("Τα μαθηματικά δουλεύουν!"); +    } else { +        println!("Ωχ όχι..."); +    } + +    // `if` ως έκφραση +    let value = if true { +        "καλό" +    } else { +        "κακό" +    }; + +    // Βρόγχοι `while` +    while 1 == 1 { +        println!("Το σύμπαν λειτουργεί κανονικά."); +        // Μπορούμε να βγούμε από το βρόγχο με το `break` +        break +    } + +    // Ατέρμονος βρόχγος +    loop { +        println!("Καλημέρα!"); +        // Μπορούμε να βγούμε από το βρόγχο με το `break` +        break +    } + +    ////////////////////////////////// +    // 5. Ασφάλεια μνήμης & δείκτες // +    ////////////////////////////////// + +    // Δείκτης με ιδιοκτήτη – μόνο ένα αντικείμενο μπορεί να είναι ο "ιδιοκτήτης" αυτού του δείκτη ανά πάσα στιγμή +    // Αυτό σημαίνει ότι μόλις το `Box` βγει εκτός πλαισίου (out of scope), ο δείκτης μπορεί να ελευθερωθεί με ασφάλεια +    let mut mine: Box<i32> = Box::new(3); +    *mine = 5; // Dereference του δείκτη +    // Εδώ, το `now_its_mine` γίνεται ιδιοκτήτης του `mine`. Δηλαδή, το `mine` μετακινείται. +    let mut now_its_mine = mine; +    *now_its_mine += 2; + +    println!("{}", now_its_mine); // 7 +    // println!("{}", mine); // Αυτό παράγει λάθος κατά τη μεταγλώττιση διότι τώρα ο δείκτης ανοίκει στο `now_its_mine` + +    // Reference (αναφορά) – ένας αμετάβλητος δείκτης που αναφέρεται σε άλλα δεδομένα +    // Όταν μια αναφορά δίνεται σε μια αξία, λέμε πως η αξία έχει "δανειστεί". +    // Όταν μια αξία δανείζεται αμετάβλητα, δεν μπορεί να είναι mutated (να μεταβληθεί) ή να μετακινηθεί. +    // Ένας "δανεισμός" παραμένει ενεργός μέχρι την τελευταία χρήση της μεταβλητής που δανείζεται. +    let mut var = 4; +    var = 3; +    let ref_var: &i32 = &var; + +    println!("{}", var); // Αντίθετα με το `mine` προηγουμένως, η μεταβλητή `var` μπορεί ακόμα να χρησιμοποιηθεί +    println!("{}", *ref_var); +    // var = 5; // Αυτό παράγει λάθος κατά τη μεταγλώττιση γιατί η μεταβλητή `var` είναι δανεισμένη +    // *ref_var = 6; // Το ίδιο εδώ, γιατί η `ref_var` αποτελεί αμετάβλητη αναφορά +    ref_var; // Εντολή no-op (τίποτα δεν εκτελείται από τον επεξεργαστή), η οποία όμως μετράει ως χρήση και κρατά τον +             // "δανεισμό" ενεργό +    var = 2; // Η `ref_var` δεν χρησιμοποιείται από εδώ και στο εξής, άρα ο "δανεισμός" τελειώνει + +    // Μεταβλητή αναφορά +    // Όσο μια αξία είναι μεταβλητά δανεισμένη, παραμένει τελείως απροσβάσιμη. +    let mut var2 = 4; +    let ref_var2: &mut i32 = &mut var2; +    *ref_var2 += 2; // Ο αστερίσκος (*) χρησιμοποιείται ως δείκτης προς την μεταβλητά δανεισμένη `var2` + +    println!("{}", *ref_var2); // 6 , // Αν είχαμε `var2` εδώ θα προκαλούνταν λάθος μεταγλώττισης. +    // O τύπος της `ref_var2` είναι &mut i32, άρα αποθηκεύει μια αναφορά προς μια αξία i32, όχι την αξία την ίδια. +    // var2 = 2; // Λάθος μεταγλώττισης, γιατί η `var2` είναι δανεισμένη. +    ref_var2; // Εντολή no-op (τίποτα δεν εκτελείται από τον επεξεργαστή), η οποία όμως μετράει ως χρήση και κρατά τον +              // "δανεισμό" ενεργό +} +``` + +## Μάθετε περισσότερα + +Υπάρχουν πολλά ακόμα πράγματα να μάθει κανείς· αυτά είναι μόνο τα βασικά της Rust, που επιτρέπουν να καταλάβουμε το +βασικό τρόπο λειτουργίας της. Για να μάθετε περισσότερα για τη Rust, διαβάστε το [The Rust Programming +Language](http://doc.rust-lang.org/book/index.html) και επισκεφθείτε το subreddit [/r/rust](http://reddit.com/r/rust). +Οι άνθρωποι πίσω από το κανάλι #rust στο irc.mozilla.org είναι επίσης πάντα πρόθυμοι να βοηθήσουν τους αρχάριους. + +Μπορείτε επίσης να παίξετε με τη Rust χρησιμοποιώντας τους εξής online μεταγλωττιστές: + +- [Rust playpen](http://play.rust-lang.org) +- [Rust website](http://rust-lang.org) diff --git a/el-gr/vim-gr.html.markdown b/el-gr/vim-gr.html.markdown new file mode 100644 index 00000000..b11b5c33 --- /dev/null +++ b/el-gr/vim-gr.html.markdown @@ -0,0 +1,267 @@ +--- +category: tool +tool: vim +contributors: +    - ["RadhikaG", "https://github.com/RadhikaG"] +filename: LearnVim-gr.txt +lang: el-gr +--- + + +[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) | 
