Πώς να ρυθμίσετε vim να μην βάλει τα σχόλια κατά την έναρξη των γραμμών, ενώ επεξεργασία αρχείων πύθωνα

ψήφοι
47

Όταν προσθέσετε ένα # στην κατάσταση εισαγωγής σε μια κενή γραμμή στο Vim κατά την επεξεργασία των αρχείων python, vim μετακινεί το # στην αρχή της γραμμής, αλλά θα ήθελα το # για να εισαχθεί στο επίπεδο καρτέλα όπου τέθηκε.

Για παράδειγμα, όταν γράφετε αυτό το vim

for i in range(10):
    #

το # δεν μένει εκεί όπου τέθηκε.

Κινείται σαν αυτό, από vim.

for i in range(10):
#

Ξέρει κανείς από ένα στοιχείο διαμόρφωσης στο vim που θα αλλάξει αυτό;

Αν βοηθάει, είμαι χρησιμοποιώντας το Ubuntu 8.10.

Δημοσιεύθηκε 09/12/2008 στις 21:21
πηγή χρήστη
Σε άλλες γλώσσες...                            


8 απαντήσεις

ψήφοι
31

Βρήκα μια απάντηση εδώ http://vim.wikia.com/wiki/Restoring_indent_after_typing_hash

Φαίνεται ότι ο vim smartindent επιλογή είναι η αιτία του προβλήματος. Το αναφερόμενο παραπάνω σελίδα περιγράφει το έργο-μια-γύρους, αλλά μετά την ανάγνωση του βοήθεια στην smartindent από μόνη της vim (: βοήθεια smartindent), αποφάσισα να δοκιμάσω cindent αντί smartindent.

Αντικατέστησα

set smartindent

με

set cindent

στο αρχείο .vimrc μου

και μέχρι στιγμής δουλεύει άψογα.

Αυτό άλλαξε επίσης σταθερή τη συμπεριφορά των «<<» και «>>» για εσοχή οπτικό μπλοκ που περιλαμβάνουν σχόλια python.

Υπάρχουν περισσότερες επιλογές διαμόρφωσης για και πληροφορίες για εσοχή στη βοήθεια vim για smartindent και cindent (: βοήθεια smartindent και: βοήθεια cindent).

Απαντήθηκε 09/12/2008 στις 23:07
πηγή χρήστη

ψήφοι
19

@PolyThinker Αν και βλέπω ότι η ανταπόκριση πολλά σε αυτό το ερώτημα, κατά τη γνώμη μου, δεν είναι μια καλή λύση. Ο συντάκτης εξακολουθεί να πιστεύει ότι θα πρέπει να εσοχή σε όλη τη διαδρομή προς τα αριστερά - το ελέγξετε πιέζοντας == σε μια γραμμή που ξεκινά με ένα hash, ή πιέζοντας = ενώ ένα μπλοκ κώδικα με σχόλια σε αυτό τονίζεται σε reindent.

Θα ήθελα να συστήσω ανεπιφύλακτα filetype indent on, και αφαιρέστε τα set smartindentκαι set autoindentset cindentγραμμές) από vimrc σας. Κάποιος άλλος (appparently David Μπούστος) είχε την καλοσύνη να γράψει ένα πλήρες πρόγραμμα ανάλυσης εσοχή για εμάς? αυτό που βρίσκεται στα $ VIMDIRECTORY / περίπτωση / python.vim.

(Παύλου cindentλύση λειτουργεί πιθανώς για python, αλλά filetype indent onείναι πολύ πιο γενικά χρήσιμο.)

Απαντήθηκε 22/04/2009 στις 15:07
πηγή χρήστη

ψήφοι
10

Έχω τις ακόλουθες γραμμές στο .vimrc μου, φαίνεται να εγκαθίσταται από προεπιλογή με το Ubuntu μου 8.10

set smartindent
inoremap # X^H#
set autoindent

Και δεν τηρούν το πρόβλημα. Ίσως μπορείτε να δοκιμάσετε αυτό. (Σημειώστε ότι ^ H πρέπει να εισάγονται από Ctrl-V Ctrl-H)

Απαντήθηκε 22/12/2008 στις 08:27
πηγή χρήστη

ψήφοι
4

Η λύση μου για την unindenting της #:

Εάν χρησιμοποιείτε cindent, αναγνωρίζουν ότι έχει σχεδιαστεί για C και C ++ κωδικοποίησης. Εδώ, ένα # σημαίνει ότι δημιουργείτε ένα #define ή #MACRO (), έτσι ώστε η συμπεριφορά είναι σωστή. Αλλά για άλλες γλώσσες, όπου # είναι ένα σχόλιο, είναι ενοχλητικό.

Η ακόλουθη εργάστηκε για μένα:

" cindent       enable specific indenting for C code
" set cin       nocin
set cin

" cinkeys       The default cinkeys causes leading # to unindent to column 0.
"               To prevent this, remove the 0# from the definition.
" set cinkeys=0{,0},0),:,0#,!^F,o,O,e - default
set cinkeys=0{,0},0),:,!^F,o,O,e
Απαντήθηκε 15/05/2014 στις 16:57
πηγή χρήστη

ψήφοι
2

Μερικές από τις άλλες απαντήσεις ήταν χρήσιμο, αλλά καμία δεν ήταν αρκετό για να αποτρέψει Vim από reindenting μια γραμμή όταν «#» είναι ο πρώτος χαρακτήρας. απάντηση PolyThinker δεν λειτούργησε για μένα, αλλά έδωσε μια ένδειξη ότι «#» θα μπορούσε να αντιστοιχιστεί εκ νέου να «εισάγετε ένα χαρακτήρα, στη συνέχεια, #, στη συνέχεια, διαγράψτε το επιπλέον χαρακτήρα και βάλτε τον κέρσορα εκεί που πρέπει». Αυτή είναι η χαρτογράφηση που κάνει τα εξής:

inoremap # X#<left><backspace><right>

Αυτό είναι απαραίτητο γιατί τα πακέτα σύνταξη vim φαίνεται να αντιμετωπίζουν «#» ως έναν ειδικό χαρακτήρα, δεν έχει σημασία πόσο έχουν οριστεί οι επιλογές. Θέλω μια γραμμή που ξεκίνησε με το «#» να είναι το ίδιο με μια γραμμή άρχισε με οποιοδήποτε άλλο χαρακτήρα. Η πιο αξιόπιστη λύση που έχω βρει είναι η παραπάνω χαρτογράφησης, η οποία έχει πραγματικά αλλάξει πρώτο χαρακτήρα της γραμμής.

Σημείωση: Έχω βρεθεί αυτή η χαρτογράφηση προκαλεί προβλήματα μετά την εκτέλεση I#<esc>στη συνέχεια, πατώντας «» να ξανακάνει την προηγούμενη εισαγωγή. Δεν έχω βρει μια λύση ακόμα.

Απαντήθηκε 20/09/2017 στις 05:07
πηγή χρήστη

ψήφοι
2

Είναι που προκαλείται από την «smartindent» χαρακτηριστικό. Αν έχετε :set smartindentστο .vimrc σας θα πρέπει να το αφαιρέσετε.

Απαντήθηκε 22/12/2008 στις 03:13
πηγή χρήστη

ψήφοι
1

Vim διαμόρφωση μου δεν το κάνει αυτό. Μπορείτε να δοκιμάσετε το σενάριο python.vim διαθέσιμη από αυτό το link: http://www.vim.org/scripts/script.php?script_id=790

Απαντήθηκε 09/12/2008 στις 22:18
πηγή χρήστη

ψήφοι
0

Αφαίρεσα set smartindentαπό ~/.vimrcαλλά ακόμα δεν απενεργοποιήσετε smartindent. Όταν άνοιξα ένα αρχείο .py και έτρεξε :set smartindent?να εμφανιστεί smartindent.

Αποδεικνύεται ότι πιο κάτω στην ενότητα ~/.vimrcήταν αυτή τη γραμμή:

autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class
                         ^^^^^^^^^^^

Μόλις διαγραφεί «smartindent» από αυτή τη γραμμή, τότε smartindent τελικά απενεργοποιηθεί και τα σχόλιά μου ήταν δαντελωτές σωστά και πάλι.

Απαντήθηκε 04/06/2014 στις 19:38
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more