読者です 読者をやめる 読者になる 読者になる

basyura's blog

あしたになったらほんきだす。

C# で using ネームスペース を補完

vim

特に考慮せずに neocomplcache の plugin を作って補完してみる。

autoload/neocomplcache/sources/csharp.vim

let s:source = {
      \ 'name': 'csharp',
      \ 'kind' : 'ftplugin',
      \ 'filetypes': {'cs' : 1 },
      \ }

let s:keywords = [
      \{'word' : 'System'                     , 'menu' : '[cs]'},
      \{'word' : 'System.Activities'          , 'menu' : '[cs]'},
      \{'word' : 'System.AddIn'               , 'menu' : '[cs]'},
      \{'word' : 'System.CodeDom'             , 'menu' : '[cs]'},
      \{'word' : 'System.Collections'         , 'menu' : '[cs]'},
      \{'word' : 'System.ComponentModel'      , 'menu' : '[cs]'},
      \{'word' : 'System.Configuration'       , 'menu' : '[cs]'},
      \{'word' : 'System.Data'                , 'menu' : '[cs]'},
      \{'word' : 'System.Deployment'          , 'menu' : '[cs]'},
      \{'word' : 'System.Device.Location'     , 'menu' : '[cs]'},
      \{'word' : 'System.Diagnostics'         , 'menu' : '[cs]'},
      \{'word' : 'System.DirectoryServices'   , 'menu' : '[cs]'},
      \{'word' : 'System.Drawing'             , 'menu' : '[cs]'},
      \{'word' : 'System.Dynamic'             , 'menu' : '[cs]'},
      \{'word' : 'System.EnterpriseServices'  , 'menu' : '[cs]'},
      \{'word' : 'System.Globalization'       , 'menu' : '[cs]'},
      \{'word' : 'System.IdentityModel'       , 'menu' : '[cs]'},
      \{'word' : 'System.IO'                  , 'menu' : '[cs]'},
      \{'word' : 'System.Linq'                , 'menu' : '[cs]'},
      \{'word' : 'System.Management'          , 'menu' : '[cs]'},
      \{'word' : 'System.Media'               , 'menu' : '[cs]'},
      \{'word' : 'System.Messaging'           , 'menu' : '[cs]'},
      \{'word' : 'System.Net'                 , 'menu' : '[cs]'},
      \{'word' : 'System.Numerics'            , 'menu' : '[cs]'},
      \{'word' : 'System.Printing'            , 'menu' : '[cs]'},
      \{'word' : 'System.Reflection'          , 'menu' : '[cs]'},
      \{'word' : 'System.Resources'           , 'menu' : '[cs]'},
      \{'word' : 'System.Runtime'             , 'menu' : '[cs]'},
      \{'word' : 'System.Security'            , 'menu' : '[cs]'},
      \{'word' : 'System.ServiceModel'        , 'menu' : '[cs]'},
      \{'word' : 'System.ServiceProcess'      , 'menu' : '[cs]'},
      \{'word' : 'System.Speech'              , 'menu' : '[cs]'},
      \{'word' : 'System.Text'                , 'menu' : '[cs]'},
      \{'word' : 'System.Threading'           , 'menu' : '[cs]'},
      \{'word' : 'System.Timers'              , 'menu' : '[cs]'},
      \{'word' : 'System.Transactions'        , 'menu' : '[cs]'},
      \{'word' : 'System.Web'                 , 'menu' : '[cs]'},
      \{'word' : 'System.Windows'             , 'menu' : '[cs]'},
      \{'word' : 'System.Workflow'            , 'menu' : '[cs]'},
      \{'word' : 'System.Xaml'                , 'menu' : '[cs]'},
      \{'word' : 'System.Xml'                 , 'menu' : '[cs]'},
      \{'word' : 'Accessibility'              , 'menu' : '[cs]'},
      \{'word' : 'Microsoft.Aspnet.Snapin'    , 'menu' : '[cs]'},
      \{'word' : 'Microsoft.Build'            , 'menu' : '[cs]'},
      \{'word' : 'Microsoft.CSharp'           , 'menu' : '[cs]'},
      \{'word' : 'Microsoft.Data.Entity.Build.Tasks' , 'menu' : '[cs]'},
      \{'word' : 'Microsoft.JScript'          , 'menu' : '[cs]'},
      \{'word' : 'Microsoft.SqlServer.Server' , 'menu' : '[cs]'},
      \{'word' : 'Microsoft.VisualBasic'      , 'menu' : '[cs]'},
      \{'word' : 'Microsoft.VisualC'          , 'menu' : '[cs]'},
      \{'word' : 'Microsoft.Win32'            , 'menu' : '[cs]'},
      \{'word' : 'Microsoft.Windows.Themes'   , 'menu' : '[cs]'},
      \{'word' : 'UIAutomationClientsideProviders' , 'menu' : '[cs]'},
      \{'word' : 'XamlGeneratedNamespace '    , 'menu' : '[cs]'},
      \]

function! s:source.initialize()
endfunction

function! s:source.finalize()
endfunction

function! s:source.get_keyword_pos(cur_text)
  return matchend(a:cur_text, '^using\s\+')
endfunction

function! s:source.get_complete_words(cur_keyword_pos, cur_keyword_str)
  return neocomplcache#keyword_filter(copy(s:keywords) , a:cur_keyword_str)
endfunction

function! neocomplcache#sources#csharp#define()
  return s:source
endfunction