Ver Fonte

Added options to choose whether GoTo commands result should be opened in the new buffer and in which one.

davits há 11 anos atrás
pai
commit
0102d23bfe
3 ficheiros alterados com 37 adições e 4 exclusões
  1. 17 0
      README.md
  2. 10 0
      plugin/youcompleteme.vim
  3. 10 4
      python/ycm/vimsupport.py

+ 17 - 0
README.md

@@ -1336,6 +1336,23 @@ Default: `1`
 
     let g:ycm_use_ultisnips_completer = 1
 
+### The `g:ycm_goto_same_buffer` option
+
+Indicates whether GoTo command result should be opened in the current buffer.
+However if current buffer has unsaved modifications then this option will be ignored and result will be opened in the new buffer created with `g:ycm_goto_buffer_command` command.
+
+Default: `1`
+
+    let g:ycm_goto_same_buffer = 1
+
+### The `g:ycm_goto_buffer_command` option
+
+Defines command for the new buffer creation where GoTo command result will be opened.
+Value should be one of the following vim commands `[ 'sp[lit]', 'vs[plit]', 'tabe[dit]' ]`
+
+Default: `split`
+    let g:ycm_goto_buffer_command = 'split'
+
 FAQ
 ---
 

+ 10 - 0
plugin/youcompleteme.vim

@@ -144,6 +144,16 @@ let g:ycm_warning_symbol =
       \ get( g:, 'ycm_warning_symbol',
       \ get( g:, 'syntastic_warning_symbol', '>>' ) )
 
+let g:ycm_goto_same_buffer =
+      \ get( g:, 'ycm_goto_same_buffer', 1 )
+
+let g:ycm_goto_buffer_command =
+      \ get( g:, 'ycm_goto_buffer_command', 'split' )
+
+if index( [ 'sp', 'split', 'vs', 'vsplit', 'tabe', 'tabedit' ], g:ycm_goto_buffer_command ) < 0
+    let g:ycm_goto_buffer_command = 'split'
+endif
+
 " On-demand loading. Let's use the autoload folder and not slow down vim's
 " startup procedure.
 augroup youcompletemeStart

+ 10 - 4
python/ycm/vimsupport.py

@@ -21,6 +21,7 @@ import vim
 import os
 import json
 from ycm.utils import ToUtf8IfNeeded
+from ycm import user_options_store
 
 def CurrentLineAndColumn():
   """Returns the 0-based current line and 0-based current column."""
@@ -65,10 +66,10 @@ def GetBufferOption( buffer_object, option ):
   return GetVariableValue( to_eval )
 
 
-def GetUnsavedAndCurrentBufferData():
-  def BufferModified( buffer_object ):
-    return bool( int( GetBufferOption( buffer_object, 'mod' ) ) )
+def BufferModified( buffer_object ):
+  return bool( int( GetBufferOption( buffer_object, 'mod' ) ) )
 
+def GetUnsavedAndCurrentBufferData():
   buffers_data = {}
   for buffer_object in vim.buffers:
     if not ( BufferModified( buffer_object ) or
@@ -244,7 +245,12 @@ def JumpToLocation( filename, line, column ):
     # location, not to the start of the newly opened file.
     # Sadly this fails on random occasions and the undesired jump remains in the
     # jumplist.
-    vim.command( 'keepjumps edit {0}'.format( filename ) )
+    if ( user_options_store.Value( 'goto_same_buffer' ) and
+         not BufferModified( vim.current.buffer ) ):
+      vim.command( 'keepjumps edit {0}'.format( filename ) )
+    else:
+      vim.command( 'keepjumps {0} {1}'.format( user_options_store.Value( 'goto_buffer_command'),
+                                               filename ) )
   vim.current.window.cursor = ( line, column - 1 )
 
   # Center the screen on the jumped-to location