Jak wyróżnić skrypty Bash w Vim?

Mój edytor Vim automatycznie podświetla Pliki PHP (vim file.php), Pliki HTML (vim file.html) i tak dalej.

Ale kiedy wpiszę: vim file i w środku napiszę skrypt Basha, to go nie podświetla.

Jak mogę powiedzieć Vimowi, aby podświetlił go jako skrypt Bash?

Zaczynam wpisywać #!/bin/bash na górze pliku, ale to nie działa.

Author: Mateusz Piotrowski, 2010-04-05

11 answers

Czy poprawnie dajesz skryptowi powłoki rozszerzenie .sh? Automatyczny wybór składni Vima jest prawie całkowicie oparty na wykrywaniu nazwy pliku (rozszerzenia). Jeśli plik nie ma zestawu składni (lub jest błędną składnią), Vim nie zmieni automatycznie poprawnej składni tylko dlatego, że zacząłeś pisać skrypt w danym języku.

Jako tymczasowe obejście, polecenie :set syn=sh włączy podświetlanie składni shell-script.

 67
Author: Mark Rushakoff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-05 02:53:01

Dotychczasowe odpowiedzi są poprawne, więc możesz użyć rozszerzenia (jak .sh) lub linii shebang (jak #!/bin/bash), aby zidentyfikować typ pliku. Jeśli nie masz jednego z nich, nadal możesz określić typ pliku ręcznie za pomocą komentarza modeline u góry lub u dołu pliku.

Na przykład, jeśli chcesz zidentyfikować skrypt bez rozszerzenia jako skrypt powłoki, możesz dodać ten komentarz na górze pliku:

# vim: set filetype=sh :

Lub

# vim: filetype=sh

To powie Vimowi, żeby leczył plik jako skrypt powłoki. (W modelinie można też ustawić inne rzeczy. W vim type :help modeline Aby uzyskać więcej informacji.)

 26
Author: bryant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-20 14:04:33

Vim może również wykrywać typy plików, sprawdzając ich zawartość (na przykład, jeśli pierwsza linia zawiera bash shebang), oto cytat z filetype.txt help:

Jeśli twój typ pliku może zostać wykryty tylko przez sprawdzenie zawartości pliku

Utwórz katalog runtime użytkownika. Zwykle używasz pierwszej pozycji opcji "runtimepath". Przykład dla Uniksa:

:!mkdir ~/.vim

Utwórz w tym celu plik skryptu Vima. Przykład:

if did_filetype()   " filetype already set..
    finish      " ..don't do these checks
endif
if getline(1) =~ '^#!.*\<mine\>'
    setfiletype mine
elseif getline(1) =~? '\<drawing\>'
    setfiletype drawing
endif

Zobacz $VIMRUNTIME / scripts.vim więcej przykładów. Zapisz ten plik jako " scripts.vim " w katalogu użytkownika runtime. Na przykład dla Uniksa:

:w ~/.vim/scripts.vim

Wykrywanie będzie działać od razu, nie ma potrzeby ponownego uruchamiania Vima.

Twoje Skrypty.vim jest ładowany przed domyślnym sprawdzaniem typów plików, które oznacza, że Twoje reguły zastępują domyślne reguły w $VIMRUNTIME / scripts.vim.

 13
Author: Matteo Riva,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-05 08:02:22

W rzeczywistości podświetlanie składni jest cechą Vima, a nie vi. Spróbuj użyć polecenia vim, a następnie wykonaj

:syntax on.

 13
Author: Gaurav Khare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-03 08:06:43

Przyszedłem na tę odpowiedź, szukając konkretnie, jak podkreślić bash składnia, nie powłoka POSIX. Po prostu wykonanie set ft=sh (lub równoważnego) spowoduje, że plik zostanie podświetlony dla powłoki POSIX, co pozostawia wiele składni poprawnych w bash podświetlonych na Czerwono. Aby uzyskać podświetlenie Basha:

" Set a variable on the buffer that tells the sh syntax highlighter
" that this is bash:
let b:is_bash = 1
" Set the filetype to sh
set ft=sh

Zauważ, że jeśli Twoje ft jest już sh, nadal potrzebujesz komendy set; w przeciwnym razie let nie zacznie działać natychmiast.

Możesz uczynić to globalnym domyślnie zmienna global, tj. let g:is_bash = 1.

:help ft-sh-syntax to strona podręcznika, którą musiałem znaleźć; wyjaśnia to i jak wywołać podświetlanie innych smaków powłoki.

 10
Author: Thanatos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-01 22:29:49

Vim może wykryć przez górny komentarz

Spróbuj tej linii na górze pliku

#!/bin/sh
 5
Author: Arun Karikalan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-03 14:56:51

Po dodaniu shebang u góry pliku, zapisz go i przeładuj (np. :w|e) i kolorowanie składni może zadziałać.

Zobacz także Vim niekonsekwentne podświetlanie składni plików bash , przyjęta odpowiedź może również pomóc.

 1
Author: dash-tom-bang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-15 22:12:32

Vim domyślnie rozpoznaje wiele typów plików. Większość z nich działa na podstawie rozszerzeń plików, ale w takim przypadku vim przeanalizuje również zawartość pliku, aby odgadnąć odpowiedni typ.

Vim ustawia typ pliku dla określonych nazw plików, takich jak .bashrc, .tcshrc, itd. automatycznie. Ale Plik z rozszerzeniem .sh zostanie rozpoznany jako skrypt csh, ksh lub bash. Aby określić, jaki to jest skrypt, vim czyta pierwszą linię pliku, ABY SPOJRZEĆ na #! Kolejka

Jeśli pierwsza linia zawiera słowo bash, Plik jest identyfikowany jako skrypt bash. Zwykle widzisz #!/bin/bash czy skrypt ma być wykonywany bezpośrednio, ale w przypadku pliku konfiguracyjnego powłoki użycie prostej # bash również by zadziałało.

Jeśli chcesz spojrzeć na szczegóły, jest to zaimplementowane w $VIMRUNTIME/filetype.vim.

 0
Author: raimue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-16 23:36:45

Prawdopodobnie najprostszym sposobem na podświetlenie składni nowego pliku, jest ponowne wczytanie go po napisaniu linii shebang. Prosty :w :e zapisze plik, przeładuje go i zinterpretuje napisaną właśnie linię shebang, aby zapewnić odpowiednie podświetlenie składni.

 0
Author: cmaster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-24 10:32:22

Jeśli znasz już typ pliku przed otwarciem skryptu lub jeśli tworzysz nowy skrypt bez rozszerzenia, które jest powszechne, możesz przekazać go Vimowi w linii poleceń w następujący sposób:

vim -c 'setfiletype sh' path/to/script
vim -c 'setfiletype python' path/to/script
 0
Author: Edge-Case,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-20 18:40:37

Gdy tworzysz nowy plik, w grę wchodzi tylko wykrywanie nazwy pliku; wykrywanie zawartości (#!/bin/bash) nie ma zastosowania, jeśli wpiszesz go po utworzeniu nowego bufora.

Rozsądną rzeczą jest po prostu zrobić :set ft=bash za pierwszym razem, a następny kiedy go edytujesz, #!/bin/bash automatycznie ustawi odpowiedni typ pliku.

 -1
Author: hobbs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-31 23:00:26