aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/filetype.vim15
-rw-r--r--src/nvim/option.c40
-rw-r--r--src/nvim/search.c62
-rw-r--r--src/nvim/testdir/test_filetype.vim2
4 files changed, 68 insertions, 51 deletions
diff --git a/runtime/filetype.vim b/runtime/filetype.vim
index 4e617052a9..4e54bcaefd 100644
--- a/runtime/filetype.vim
+++ b/runtime/filetype.vim
@@ -692,12 +692,21 @@ au BufNewFile,BufRead .gtkrc,gtkrc setf gtkrc
au BufNewFile,BufRead *.haml setf haml
" Hamster Classic | Playground files
-au BufNewFile,BufRead *.hsc,*.hsm setf hamster
+au BufNewFile,BufRead *.hsm setf hamster
+au BufNewFile,BufRead *.hsc
+ \ if match(join(getline(1,10), "\n"), '\%(^\|\n\)\s*\%({-#\_s*LANGUAGE\>\|\<module\>\)') != -1 |
+ \ setf haskell |
+ \ else |
+ \ setf hamster |
+ \ endif
" Haskell
au BufNewFile,BufRead *.hs,*.hs-boot setf haskell
au BufNewFile,BufRead *.lhs setf lhaskell
au BufNewFile,BufRead *.chs setf chaskell
+au BufNewFile,BufRead cabal.project setf cabalproject
+au BufNewFile,BufRead $HOME/.cabal/config setf cabalconfig
+au BufNewFile,BufRead cabal.config setf cabalconfig
" Haste
au BufNewFile,BufRead *.ht setf haste
@@ -2042,12 +2051,14 @@ au BufNewFile,BufRead bzr_log.* setf bzr
" Bazel build file
if !has("fname_case")
- au BufNewFile,BufRead *.BUILD,BUILD setf bzl
+ au BufNewFile,BufRead *.BUILD,BUILD setf bzl
endif
" BIND zone
au BufNewFile,BufRead */named/db.*,*/bind/db.* call s:StarSetf('bindzone')
+au BufNewFile,BufRead cabal.project.* call s:StarSetf('cabalproject')
+
" Calendar
au BufNewFile,BufRead */.calendar/*,
\*/share/calendar/*/calendar.*,*/share/calendar/calendar.*
diff --git a/src/nvim/option.c b/src/nvim/option.c
index 0a91687352..146bce8cc0 100644
--- a/src/nvim/option.c
+++ b/src/nvim/option.c
@@ -7173,46 +7173,6 @@ int get_sts_value(void)
return (int)result;
}
-/// Check matchpairs option for "*initc".
-/// If there is a match set "*initc" to the matching character and "*findc" to
-/// the opposite character. Set "*backwards" to the direction.
-/// When "switchit" is true swap the direction.
-void find_mps_values(int *initc, int *findc, int *backwards, int switchit)
-{
- char_u *ptr = curbuf->b_p_mps;
-
- while (*ptr != NUL) {
- if (utf_ptr2char(ptr) == *initc) {
- if (switchit) {
- *findc = *initc;
- *initc = utf_ptr2char(ptr + utfc_ptr2len(ptr) + 1);
- *backwards = true;
- } else {
- *findc = utf_ptr2char(ptr + utfc_ptr2len(ptr) + 1);
- *backwards = false;
- }
- return;
- }
- char_u *prev = ptr;
- ptr += utfc_ptr2len(ptr) + 1;
- if (utf_ptr2char(ptr) == *initc) {
- if (switchit) {
- *findc = *initc;
- *initc = utf_ptr2char(prev);
- *backwards = false;
- } else {
- *findc = utf_ptr2char(prev);
- *backwards = true;
- }
- return;
- }
- ptr += utfc_ptr2len(ptr);
- if (*ptr == ',') {
- ptr++;
- }
- }
-}
-
/// This is called when 'breakindentopt' is changed and when a window is
/// initialized
static bool briopt_check(win_T *wp)
diff --git a/src/nvim/search.c b/src/nvim/search.c
index f979889540..90e1e25de2 100644
--- a/src/nvim/search.c
+++ b/src/nvim/search.c
@@ -1658,6 +1658,48 @@ static bool find_rawstring_end(char_u *linep, pos_T *startpos, pos_T *endpos)
return found;
}
+/// Check matchpairs option for "*initc".
+/// If there is a match set "*initc" to the matching character and "*findc" to
+/// the opposite character. Set "*backwards" to the direction.
+/// When "switchit" is true swap the direction.
+static void find_mps_values(int *initc, int *findc, bool *backwards,
+ bool switchit)
+ FUNC_ATTR_NONNULL_ALL
+{
+ char_u *ptr = curbuf->b_p_mps;
+
+ while (*ptr != NUL) {
+ if (utf_ptr2char(ptr) == *initc) {
+ if (switchit) {
+ *findc = *initc;
+ *initc = utf_ptr2char(ptr + utfc_ptr2len(ptr) + 1);
+ *backwards = true;
+ } else {
+ *findc = utf_ptr2char(ptr + utfc_ptr2len(ptr) + 1);
+ *backwards = false;
+ }
+ return;
+ }
+ char_u *prev = ptr;
+ ptr += utfc_ptr2len(ptr) + 1;
+ if (utf_ptr2char(ptr) == *initc) {
+ if (switchit) {
+ *findc = *initc;
+ *initc = utf_ptr2char(prev);
+ *backwards = false;
+ } else {
+ *findc = utf_ptr2char(prev);
+ *backwards = true;
+ }
+ return;
+ }
+ ptr += utfc_ptr2len(ptr);
+ if (*ptr == ',') {
+ ptr++;
+ }
+ }
+}
+
/*
* findmatchlimit -- find the matching paren or brace, if it exists within
* maxtravel lines of the cursor. A maxtravel of 0 means search until falling
@@ -1684,7 +1726,7 @@ pos_T *findmatchlimit(oparg_T *oap, int initc, int flags, int64_t maxtravel)
static pos_T pos; // current search position
int findc = 0; // matching brace
int count = 0; // cumulative number of braces
- int backwards = false; // init for gcc
+ bool backwards = false; // init for gcc
bool raw_string = false; // search for raw string
bool inquote = false; // true when inside quotes
char_u *ptr;
@@ -1729,9 +1771,10 @@ pos_T *findmatchlimit(oparg_T *oap, int initc, int flags, int64_t maxtravel)
raw_string = (initc == 'R');
initc = NUL;
} else if (initc != '#' && initc != NUL) {
- find_mps_values(&initc, &findc, &backwards, TRUE);
- if (findc == NUL)
+ find_mps_values(&initc, &findc, &backwards, true);
+ if (findc == NUL) {
return NULL;
+ }
} else {
/*
* Either initc is '#', or no initc was given and we need to look
@@ -1759,20 +1802,20 @@ pos_T *findmatchlimit(oparg_T *oap, int initc, int flags, int64_t maxtravel)
else if (linep[pos.col] == '/') {
if (linep[pos.col + 1] == '*') {
comment_dir = FORWARD;
- backwards = FALSE;
+ backwards = false;
pos.col++;
} else if (pos.col > 0 && linep[pos.col - 1] == '*') {
comment_dir = BACKWARD;
- backwards = TRUE;
+ backwards = true;
pos.col--;
}
} else if (linep[pos.col] == '*') {
if (linep[pos.col + 1] == '/') {
comment_dir = BACKWARD;
- backwards = TRUE;
+ backwards = true;
} else if (pos.col > 0 && linep[pos.col - 1] == '/') {
comment_dir = FORWARD;
- backwards = FALSE;
+ backwards = false;
}
}
}
@@ -1794,9 +1837,10 @@ pos_T *findmatchlimit(oparg_T *oap, int initc, int flags, int64_t maxtravel)
if (initc == NUL)
break;
- find_mps_values(&initc, &findc, &backwards, FALSE);
- if (findc)
+ find_mps_values(&initc, &findc, &backwards, false);
+ if (findc) {
break;
+ }
pos.col += utfc_ptr2len(linep + pos.col);
}
if (!findc) {
diff --git a/src/nvim/testdir/test_filetype.vim b/src/nvim/testdir/test_filetype.vim
index af8482bdbe..ed75bda7a5 100644
--- a/src/nvim/testdir/test_filetype.vim
+++ b/src/nvim/testdir/test_filetype.vim
@@ -86,6 +86,8 @@ let s:filename_checks = {
\ 'bzr': ['bzr_log.any'],
\ 'c': ['enlightenment/file.cfg', 'file.qc', 'file.c'],
\ 'cabal': ['file.cabal'],
+ \ 'cabalconfig': ['cabal.config'],
+ \ 'cabalproject': ['cabal.project', 'cabal.project.local'],
\ 'calendar': ['calendar'],
\ 'catalog': ['catalog', 'sgml.catalogfile'],
\ 'cdl': ['file.cdl'],