diff --git a/python/completers/completer.py b/python/completers/completer.py index fbdcf67e..f96aed49 100644 --- a/python/completers/completer.py +++ b/python/completers/completer.py @@ -134,7 +134,7 @@ class Completer( object ): if not line_length or start_column - 1 >= line_length: return False - filetype = vimsupport.CurrentFiletypes()[ 0 ] + filetype = self._CurrentFiletype() triggers = self.triggers_for_filetype[ filetype ] for trigger in triggers: @@ -266,6 +266,17 @@ class Completer( object ): return False + def _CurrentFiletype( self ): + filetypes = vimsupport.CurrentFiletypes() + supported = self.SupportedFiletypes() + + for filetype in filetypes: + if filetype in supported: + return filetype + + return filetypes[0] + + @abc.abstractmethod def SupportedFiletypes( self ): pass diff --git a/python/completers/cpp/clang_completer.py b/python/completers/cpp/clang_completer.py index 456f80e3..4fc93a1c 100644 --- a/python/completers/cpp/clang_completer.py +++ b/python/completers/cpp/clang_completer.py @@ -246,5 +246,9 @@ def DiagnosticsToDiagStructure( diagnostics ): def ClangAvailableForBuffer( buffer_object ): - filetype = vim.eval( 'getbufvar({0}, "&ft")'.format( buffer_object.number ) ) - return filetype in CLANG_FILETYPES + filetypes = vim.eval( 'getbufvar({0}, "&ft")'.format( buffer_object.number ) ) + supported_fts = [ft for ft in filetypes.split('.') if ft in CLANG_FILETYPES] + if supported_fts: + return True + else: + return False diff --git a/python/ycm.py b/python/ycm.py index f39ee81a..e027a86c 100644 --- a/python/ycm.py +++ b/python/ycm.py @@ -60,11 +60,19 @@ class YouCompleteMe( object ): def GetFiletypeCompleter( self ): filetypes = vimsupport.CurrentFiletypes() - for filetype in filetypes: - completer = self.GetFiletypeCompleterForFiletype( filetype ) - if completer: + completers = [self.GetFiletypeCompleterForFiletype( filetype ) + for filetype in filetypes ] + + if not completers: + return None + + # Try to find a native completer first + for completer in completers: + if completer and completer is not self.omnicomp: return completer - return None + + # Return the omni completer for the first filetype + return completers[0] def GetFiletypeCompleterForFiletype( self, filetype ):