Browse Source

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

davits 11 năm trước cách đây
mục cha
commit
0102d23bfe
3 tập tin đã thay đổi với 37 bổ sung4 xóa
  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