2012-05-29 2 views
2

Мое vi было замечательно выделять ошибки в моих сценариях bash. Тем не менее, одна вещь, которую я замечаю, - это когда я использую расширение bash для всего upppercase или всего нижнего регистра, vi выделяет символы как ошибку. Есть ли решение для этого?vi подчеркивает bash-скриптинг в верхнем регистре или в нижнем регистре как ошибка

#!/bin/bash 
mystr="Abc" 
echo ${mystr,,} # Works, but vi highlights ,, as in error 

% ./test.sh 
abc 
% 
+0

Я не думаю, что 'echo $ {mystr ,,}' работает ... Но я вижу вашу проблему. Например, 'echo $ {mystr // A/a}' выделяется как ошибка. –

+0

@Tim работает в bash 4.0 - http://stackoverflow.com/questions/2264428/converting-string-to-lower-case-in-bash-shell-scripting – maverick

+0

А, я только что подтвердил это. Darn new features ... –

ответ

2

Подсветка синтаксиса VIM выполняется с помощью файла синтаксиса. Войдите в VIM и введите :echo $VIMRUNTIME. Это сообщит вам каталог VIMRUNTIME. В этом каталоге есть каталог с именем syntax. Внутри это определения синтаксиса. Существует файл с именем sh.vim, который содержит определения для BASH, Kornshell и Bourne shell.

Оглянитесь вокруг линии # 400 файла, вы увидите что-то вроде этого:

" Special ${parameter OPERATOR word} handling: {{{1 
" sh ksh bash : ${parameter:-word} word is default value 
" sh ksh bash : ${parameter:=word} assign word as default value 
" sh ksh bash : ${parameter:?word} display word if parameter is null 
" sh ksh bash : ${parameter:+word} use word if parameter is not null, otherwise nothing 
" ksh bash : ${parameter#pattern} remove small left pattern 
" ksh bash : ${parameter##pattern} remove large left pattern 
" ksh bash : ${parameter%pattern} remove small right pattern 
" ksh bash : ${parameter%%pattern} remove large right pattern 

Он находится в ЭТА раздел, который определяет образцы, и они законными или нет ли. Вам нужно определить область, которая выглядит следующим образом:

if exists("b:is_bash") 
    Here be dragons 
endif 

На самом деле, я вижу один дальше вниз по линии № 423 в последней версии файла sh.vim, так что вы не должны определить свои собственные ,

Теперь все, что вам нужно сделать, это заменить раздел Here be dragons на что-то, что определяет синтаксис, который вы хотите показать, а не ошибку. Я не знаю достаточно синтаксиса VIM, чтобы рассказать вам. Однако это не выглядит сложным. Сделайте резервную копию старого sh.vim и получите удовольствие. Верьте или нет, все это задокументировано прямо в VIM. Я изменил файлы синтаксиса для Perl и Python без особых проблем.

вы также можете перейти на https://vim.svn.sourceforge.net/svnroot/vim/vim7/runtime/syntax/ и посмотреть, есть ли новый файл sh.vim, который может содержать исправление синтаксиса, в котором вы нуждаетесь.

Вы также можете сообщить об этом проблеме VIM project и сообщить им об этой проблеме. Они очень хорошо разбираются в таких вещах, а затем вы можете загрузить последнее исправление на URL-адрес Subversion выше.

+0

Это была моя скрытая повестка дня: чтобы узнать, как vi синтаксис синтаксиса для разных языков, и объяснил ли он мне лично. Mucho спасибо! – maverick