rails-ahoy 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +7 -0
  2. data/.DS_Store +0 -0
  3. data/.gitignore +14 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +31 -0
  7. data/Rakefile +2 -0
  8. data/ahoy.gemspec +24 -0
  9. data/lib/ahoy.rb +5 -0
  10. data/lib/ahoy/version.rb +3 -0
  11. data/lib/generators/ahoy/ansible_generator.rb +36 -0
  12. data/lib/generators/ahoy/base.rb +24 -0
  13. data/lib/generators/ahoy/deploy_generator.rb +47 -0
  14. data/lib/generators/ahoy/init_generator.rb +49 -0
  15. data/lib/generators/ahoy/templates/_Vagrantfile +20 -0
  16. data/lib/generators/ahoy/templates/_database.yml +18 -0
  17. data/lib/generators/ahoy/templates/_deploy.rb +51 -0
  18. data/lib/generators/ahoy/templates/_env_vars.yml +7 -0
  19. data/lib/generators/ahoy/templates/_puma.rb +24 -0
  20. data/lib/generators/ahoy/templates/_puma.sh +79 -0
  21. data/lib/generators/ahoy/templates/ansible/playbooks/playbook.yml +22 -0
  22. data/lib/generators/ahoy/templates/ansible/playbooks/roles/deploy_env/tasks/main.yml +10 -0
  23. data/lib/generators/ahoy/templates/ansible/playbooks/roles/deploy_env/templates/database.yml +9 -0
  24. data/lib/generators/ahoy/templates/ansible/playbooks/roles/deploy_env/templates/secrets.yml +2 -0
  25. data/lib/generators/ahoy/templates/ansible/playbooks/roles/essentials/tasks/main.yml +43 -0
  26. data/lib/generators/ahoy/templates/ansible/playbooks/roles/essentials/templates/vimrc +472 -0
  27. data/lib/generators/ahoy/templates/ansible/playbooks/roles/nginx/tasks/main.yml +15 -0
  28. data/lib/generators/ahoy/templates/ansible/playbooks/roles/nginx/templates/platform.conf +24 -0
  29. data/lib/generators/ahoy/templates/ansible/playbooks/roles/nodejs/tasks/main.yml +6 -0
  30. data/lib/generators/ahoy/templates/ansible/playbooks/roles/postgresql/handlers/main.yml +3 -0
  31. data/lib/generators/ahoy/templates/ansible/playbooks/roles/postgresql/tasks/main.yml +39 -0
  32. data/lib/generators/ahoy/templates/ansible/playbooks/roles/postgresql/templates/pg_hba.conf +91 -0
  33. data/lib/generators/ahoy/templates/ansible/playbooks/roles/ruby/files/gemrc +5 -0
  34. data/lib/generators/ahoy/templates/ansible/playbooks/roles/ruby/tasks/gems.yml +6 -0
  35. data/lib/generators/ahoy/templates/ansible/playbooks/roles/ruby/tasks/main.yml +4 -0
  36. data/lib/generators/ahoy/templates/ansible/playbooks/roles/ruby/tasks/rbenv.yml +31 -0
  37. data/lib/generators/ahoy/templates/ansible/playbooks/roles/ruby/tasks/ruby.yml +15 -0
  38. data/lib/generators/ahoy/templates/ansible/playbooks/roles/security/tasks/firewall.yml +6 -0
  39. data/lib/generators/ahoy/templates/ansible/playbooks/roles/security/tasks/main.yml +9 -0
  40. data/lib/generators/ahoy/templates/ansible/playbooks/roles/user/tasks/main.yml +6 -0
  41. data/lib/generators/ahoy/templates/ansible/playbooks/tasks/vagrant_settings.yml +3 -0
  42. data/lib/generators/ahoy/templates/ansible_templates/_hosts +5 -0
  43. data/lib/generators/ahoy/templates/ansible_templates/_provision.sh +1 -0
  44. data/lib/generators/ahoy/templates/ansible_templates/playbooks/group_vars/_all.yml +6 -0
  45. data/lib/generators/ahoy/templates/ansible_templates/playbooks/host_vars/_default.yml +8 -0
  46. data/lib/generators/ahoy/templates/ansible_templates/playbooks/host_vars/_production_deploy.yml +7 -0
  47. data/lib/generators/ahoy/templates/ansible_templates/playbooks/host_vars/_production_root.yml +2 -0
  48. data/lib/generators/ahoy/templates/ansible_templates/playbooks/roles/security/tasks/_ssh_settings.yml +25 -0
  49. data/lib/generators/ahoy/vagrant_generator.rb +52 -0
  50. metadata +121 -0
@@ -0,0 +1,22 @@
1
+ ---
2
+ # Production playbook
3
+ #==========================================================
4
+ - hosts: production_root
5
+ sudo: true
6
+ user: root
7
+ roles:
8
+ - role: user
9
+ - role: security
10
+
11
+ - hosts: production_deploy
12
+ sudo: true
13
+ user: deploy
14
+ vars_files:
15
+ - ../../env_vars.yml
16
+ roles:
17
+ - role: essentials
18
+ - role: nodejs
19
+ - role: nginx
20
+ - role: postgresql
21
+ - role: ruby
22
+ - role: deploy_env
@@ -0,0 +1,10 @@
1
+ ---
2
+ - name: create deploy directory
3
+ sudo: true
4
+ file: path=/var/www/{{ app_name }}/shared/config owner={{ deploy_user }} group={{ deploy_user }} recurse=yes state=directory
5
+
6
+ - name: copy database.yml
7
+ template: src=database.yml dest=/var/www/{{ app_name }}/shared/config/database.yml owner={{ deploy_user }} group={{ deploy_user }}
8
+
9
+ - name: copy secrets.yml
10
+ template: src=secrets.yml dest=/var/www/{{ app_name }}/shared/config/secrets.yml owner={{ deploy_user }} group={{ deploy_user }}
@@ -0,0 +1,9 @@
1
+ production:
2
+ adapter: postgresql
3
+ host: localhost
4
+ encoding: unicode
5
+ pool: 5
6
+ template: template0
7
+ database: {{ production.db_name }}
8
+ username: {{ production.db_user }}
9
+ password: {{ production.db_password }}
@@ -0,0 +1,2 @@
1
+ production:
2
+ secret_key_base: {{ production.secret_key_base }}
@@ -0,0 +1,43 @@
1
+ ---
2
+ - name: add keyscan to allow basic access to github
3
+ shell: ssh-keyscan github.com >> /etc/ssh/ssh_known_hosts
4
+
5
+ - name: install basic packages
6
+ apt: pkg={{item}} state=present update_cache=yes
7
+ with_items:
8
+ - build-essential
9
+ - git-core
10
+ - curl
11
+ - wget
12
+ - cmake
13
+ - python-dev
14
+
15
+ - name: add apt-get repository for latest vim
16
+ action: apt_repository repo=ppa:fcwu-tw/ppa
17
+
18
+ - name: install vim
19
+ apt: name=vim state=latest update_cache=yes
20
+
21
+ - name: copy .vimrc
22
+ template: src=vimrc dest=/home/{{ deploy_user}}/.vimrc owner={{ deploy_user }} group={{ deploy_user }}
23
+
24
+ - name: check if NeoBundle exists
25
+ shell: test -d /home/{{ deploy_user }}/.vim/bundle/.neobundle && echo true
26
+ register: neobundle_installed
27
+ ignore_errors: yes
28
+
29
+ - name: download NeoBundle plugin for vim
30
+ git: repo=git://github.com/Shougo/neobundle.vim dest=/home/{{ deploy_user }}/.vim/bundle/neobundle.vim
31
+ when: neobundle_installed|failed
32
+
33
+ - name: check if YouCompleteMe exists
34
+ shell: test -d /home/{{ deploy_user }}/.vim/bundle/YouCompleteMe && echo true
35
+ register: ycm_installed
36
+ ignore_errors: yes
37
+
38
+ - name: download YouCompleteMe plugin for vim
39
+ git: repo=git://github.com/Valloric/YouCompleteMe dest=/home/{{ deploy_user }}/.vim/bundle/YouCompleteMe
40
+ when: ycm_installed|failed
41
+
42
+ - name: change .vim permissions
43
+ file: path=/home/{{ deploy_user }}/.vim owner={{ deploy_user }} group={{ deploy_user }} recurse=yes state=directory
@@ -0,0 +1,472 @@
1
+ " ===================================================
2
+ " INITIALIZE
3
+ " ===================================================
4
+ if has('vim_starting')
5
+ set nocompatible
6
+ set runtimepath+=$HOME/.vim/bundle/neobundle.vim/
7
+ endif
8
+ call neobundle#begin(expand('$HOME/.vim/bundle'))
9
+
10
+ NeoBundleFetch 'Shougo/neobundle.vim'
11
+
12
+ " File management, search, navigation
13
+ NeoBundle 'mileszs/ack.vim'
14
+ NeoBundle 'kien/ctrlp.vim'
15
+ NeoBundle 'sjl/gundo.vim'
16
+ NeoBundle 'scrooloose/nerdtree'
17
+ NeoBundle 'vim-scripts/restore_view.vim'
18
+ NeoBundle 'jeetsukumaran/vim-buffergator'
19
+ NeoBundle 'vim-scripts/YankRing.vim'
20
+ NeoBundle 'vim-scripts/zoomwintab.vim'
21
+
22
+ " Vim UI/UX
23
+ NeoBundle 'bling/vim-airline'
24
+ NeoBundle 'reedes/vim-colors-pencil'
25
+ NeoBundle 'gcmt/taboo.vim'
26
+
27
+ " Syntax highlighting
28
+ " NeoBundle 'scrooloose/syntastic'
29
+ NeoBundle 'jtratner/vim-flavored-markdown.git'
30
+ NeoBundle 'elzr/vim-json'
31
+ NeoBundle 'kchmck/vim-coffee-script'
32
+ NeoBundle 'pangloss/vim-javascript'
33
+ " NeoBundle 'chase/vim-ansible-yaml'
34
+
35
+ " Snippets & autocomplete
36
+ NeoBundle 'sirver/ultisnips'
37
+ NeoBundle 'Valloric/YouCompleteMe'
38
+ NeoBundle 'honza/vim-snippets'
39
+
40
+ " Formatters, selectors, accelerators
41
+ NeoBundle 'mattn/emmet-vim'
42
+ NeoBundle 'vim-scripts/matchit.zip'
43
+ NeoBundle 'godlygeek/tabular'
44
+ NeoBundle 'tpope/vim-commentary'
45
+ NeoBundle 'tpope/vim-endwise'
46
+ NeoBundle 'terryma/vim-multiple-cursors'
47
+ NeoBundle 'tpope/vim-repeat'
48
+ NeoBundle 'tpope/vim-surround'
49
+
50
+ " Ruby/Rails
51
+ NeoBundle 'vim-ruby/vim-ruby'
52
+ NeoBundle 'tpope/vim-rails'
53
+ NeoBundle 'henrik/vim-ruby-runner'
54
+ NeoBundle 'nelstrom/vim-textobj-rubyblock'
55
+ NeoBundle 'skalnik/vim-vroom'
56
+
57
+ " Git
58
+ NeoBundle 'tpope/vim-fugitive'
59
+ NeoBundle 'mhinz/vim-signify'
60
+
61
+ " Dependencies & utilities
62
+ NeoBundle 'MarcWeber/vim-addon-mw-utils'
63
+ NeoBundle 'kana/vim-textobj-user'
64
+ NeoBundle 'tomtom/tlib_vim'
65
+
66
+ call neobundle#end()
67
+
68
+ filetype plugin indent on
69
+
70
+ NeoBundleCheck
71
+
72
+ " ===================================================
73
+ " VISUALS
74
+ " ===================================================
75
+ syntax enable
76
+
77
+ " Colorscheme
78
+ set t_Co=256
79
+ set background=dark
80
+ colorscheme pencil
81
+ " Fix for pencil comments
82
+ hi Comment cterm=NONE ctermbg=00 ctermfg=08
83
+ " hi ColorColumn ctermbg=27
84
+
85
+ " Tab styles
86
+ hi TabLineFill ctermfg=08 ctermbg=08
87
+ hi TabLine ctermfg=13 ctermbg=08
88
+ hi TabLineSel ctermfg=02 ctermbg=00
89
+
90
+ " Interactive cursor
91
+ let &t_SI = "\<esc>]50;CursorShape=1\x7"
92
+ let &t_EI = "\<esc>]50;CursorShape=0\x7"
93
+
94
+ " For MacVim
95
+ if has("gui_running")
96
+ colorscheme pencil
97
+ set guifont=Monaco:h13
98
+ set guioptions-=r
99
+ set guioptions-=T
100
+ set guioptions-=L
101
+ set fuoptions=maxvert,maxhorz
102
+ set columns=1000
103
+ au GUIEnter * set fullscreen
104
+ endif
105
+
106
+ " ===================================================
107
+ " REMAPS
108
+ " ===================================================
109
+ let mapleader=","
110
+
111
+ " Movement
112
+ nnoremap j gj
113
+ nnoremap k gk
114
+ nnoremap <c-j> }
115
+ nnoremap <c-k> {
116
+ nnoremap <s-j> }
117
+ nnoremap <s-k> {
118
+ nnoremap <c-h> ^
119
+ nnoremap <c-l> $
120
+ vnoremap <c-h> ^
121
+ vnoremap <c-l> $
122
+
123
+ " Windows
124
+ nnoremap wl <c-w>l
125
+ nnoremap wh <c-w>h
126
+ nnoremap wj <c-w>j
127
+ nnoremap wk <c-w>k
128
+ nnoremap w= <c-w>=
129
+ nnoremap wL <c-w>L
130
+ nnoremap wH <c-w>H
131
+ nnoremap wJ <c-w>J
132
+ nnoremap wK <c-w>K
133
+ nnoremap wf <c-w>x
134
+ nnoremap wo :ZoomWinTabToggle<cr>
135
+
136
+ " Tabs
137
+ nnoremap t <esc>:tabnew<cr>
138
+ nnoremap T <esc><c-w>T
139
+ nnoremap { <esc>gT
140
+ nnoremap } <esc>gt
141
+
142
+ " File navigation, search, replace
143
+ nnoremap <leader>n :NERDTreeToggle<cr>
144
+ nnoremap <leader>f :NERDTreeFind<cr>
145
+ nnoremap <leader>s :Ack<space>
146
+ nnoremap <leader><space> :noh<cr>
147
+ nnoremap <leader>* *:%s//
148
+
149
+ " Keep search matches in the middle of the window
150
+ nnoremap n nzzzv
151
+ nnoremap N Nzzzv
152
+
153
+ " Keep indent selected
154
+ vnoremap <s-l> >gv
155
+ vnoremap <s-h> <gv
156
+ vnoremap > >gv
157
+ vnoremap < <gv
158
+
159
+ " Make F1 useful
160
+ nmap <F1> <esc>
161
+ imap <F1> <esc>
162
+
163
+ " Convential select all
164
+ nnoremap <leader>a ggVG
165
+
166
+ " Change pwd to current file
167
+ nnoremap <leader>cd :lcd<space>%:p:h<cr>:pwd<cr>
168
+
169
+ " Open in pwd
170
+ cnoremap e<space> e <c-r>=expand('%:p:h') . '/'<cr>
171
+
172
+ " Copy & paste to clipboard
173
+ vnoremap <leader>y "*y
174
+ nnoremap <leader>p "*p
175
+
176
+ " Drag block up/down
177
+ vnoremap <s-j> :m'>+<cr>gv
178
+ vnoremap <s-k> :m-2<cr>gv
179
+
180
+ " Toggle line wrapping
181
+ nnoremap <leader>w :set wrap!<cr>
182
+ nnoremap <leader>i :set list!<cr>
183
+
184
+ " Toggle relative numbers in visual line mode
185
+ nnoremap <silent> v v:<c-u>set nonu rnu<cr>gv
186
+ nnoremap <silent> V V0:<c-u>set nonu rnu<cr>gv
187
+ nnoremap <silent> <c-v> <c-v>:<c-u>set nonu rnu<cr>gv
188
+ vnoremap <esc> <esc>:set nornu nu<cr>
189
+ autocmd CursorMoved * if mode() !~# "[vV\<c-v>]" | set nornu nu | endif
190
+
191
+ " Use sane regexes
192
+ nnoremap / /\v
193
+ vnoremap / /\v
194
+
195
+ " Tags
196
+ nnoremap <c-]> <c-]>mzzvzz15<c-e>`z:Pulse<cr>
197
+ nnoremap <c-\> <c-w>v<c-w>L<c-]>mzzMzvzz15<c-e>`z:Pulse<cr>
198
+ nnoremap <leader>\ :tab split<CR>:exec("tag ".expand("<cword>"))<cr><c-e>`z:Pulse<cr>
199
+ nnoremap <silent> <leader>tt :!ctags -R . <cr>
200
+
201
+ " Sudo to write
202
+ cnoremap w!! w !sudo tee % >/dev/null
203
+
204
+ " Modify command line cursor movement
205
+ cnoremap <c-a> <home>
206
+ cnoremap <c-e> <end>
207
+
208
+ " Gundo
209
+ nnoremap <leader>G :GundoToggle<cr>
210
+
211
+ " Tabularize
212
+ vnoremap <leader>T :Tabularize /
213
+
214
+ " YankRing
215
+ nnoremap <leader>Y :YRShow<cr>
216
+
217
+ " ===================================================
218
+ " Settings
219
+ " ===================================================
220
+ " Searching
221
+ set incsearch
222
+ set ignorecase
223
+ set smartcase
224
+ set showmatch
225
+ set hlsearch
226
+ set gdefault
227
+ set wildmenu
228
+ set wildmode=list:longest,full
229
+ set wildignore+=*/.tmp/*,*.so,*.swp,*.zip,*.git
230
+ set shellpipe=>
231
+
232
+ " Tabbing and indents
233
+ set autoindent
234
+ set smartindent
235
+ set expandtab
236
+ set shiftwidth=2
237
+ set scrolloff=3
238
+ set softtabstop=2
239
+ set tabstop=8
240
+ set shiftround
241
+
242
+ " Formatting, layout, misc tweeks
243
+ set fileencoding=utf-8
244
+ set encoding=utf-8
245
+ set backspace=indent,eol,start
246
+ set autoread
247
+ set autowrite
248
+ set number
249
+ set ruler
250
+ set cursorline
251
+ set cursorcolumn
252
+ " set colorcolumn=80
253
+ set visualbell
254
+ set showcmd
255
+ set laststatus=2
256
+ set showmode!
257
+ set wrap
258
+ set linebreak
259
+ let &showbreak = '↪ '
260
+ set listchars=tab:▸\ ,trail:·,eol:¬
261
+ " set splitright
262
+
263
+ " Makes things faster?
264
+ set notimeout
265
+ set ttimeout
266
+ set ttimeoutlen=10
267
+ set lazyredraw
268
+
269
+ " Better completion
270
+ set complete=.,w,b,u,t
271
+ set completeopt=longest,menuone,preview
272
+
273
+ " Backups, swapfiles, views
274
+ set backup
275
+ set noswapfile
276
+ set history=1000
277
+ set undofile
278
+ set undoreload=10000
279
+ set viewoptions=cursor,folds
280
+
281
+ set undodir=~/.vim/tmp/undo//
282
+ set backupdir=~/.vim/backup//
283
+ set directory=~/.vim/tmp/swap//
284
+ set viewdir=~/.vim/tmp/view//
285
+ set viminfo+=n$HOME/.vim/tmp/.viminfo
286
+ set tags=./tmp/tags,./tags,tags
287
+
288
+ " Make those folders automatically if they don't already exist.
289
+ if !isdirectory(expand(&undodir))
290
+ call mkdir(expand(&undodir), "p")
291
+ endif
292
+ if !isdirectory(expand(&backupdir))
293
+ call mkdir(expand(&backupdir), "p")
294
+ endif
295
+ if !isdirectory(expand(&directory))
296
+ call mkdir(expand(&directory), "p")
297
+ endif
298
+ if !isdirectory(expand(&viewdir))
299
+ call mkdir(expand(&viewdir), "p")
300
+ endif
301
+
302
+ " Don't try to highlight lines longer than 800 characters.
303
+ set synmaxcol=800
304
+
305
+ " ===================================================
306
+ " PLUGINS
307
+ " ===================================================
308
+ " NERDTree
309
+ let NERDTreeShowHidden=1
310
+ let NERDTreeQuitOnOpen=1
311
+ let NERDTreeBookmarksFile=expand("$HOME/.vim/tmp/NERDTreeBookmarks")
312
+
313
+ " Ctrlp
314
+ let g:ctrlp_match_window='order:ttb,max:30'
315
+ let g:ctrlp_clear_cache_on_exit=1
316
+ let g:ctrlp_cache_dir='$HOME/.vim/tmp/cache/ctrlp'
317
+ let g:ctrlp_arg_map=1
318
+ let g:ctrlp_max_files=0
319
+ let g:ctrlp_max_depth=40
320
+ let g:ctrlp_custom_ignore = '\v[\/](\.git|\.hg|\.svn)$'
321
+
322
+ " Ack
323
+ let g:ackhighlight=1
324
+
325
+ " Airline
326
+ let g:airline_left_sep=''
327
+ let g:airline_right_sep=''
328
+ let g:airline#extensions#whitespace#enabled=0
329
+ let g:airline_theme='pencil'
330
+
331
+ " Buffergator
332
+ let g:buffergator_viewport_split_policy='R'
333
+ let g:buffergator_split_size=50
334
+
335
+ " Taboo
336
+ let g:taboo_tab_format=' %f '
337
+
338
+ " YankRing
339
+ let g:yankring_history_dir='$HOME/.vim/tmp'
340
+ let g:yankring_clipboard_monitor=0
341
+ " YR - Stop polluting my global map space
342
+ let g:yankring_n_keys=''
343
+ let g:yankring_o_keys=''
344
+ let g:yankring_zap_keys=''
345
+ let g:yankring_ignore_operator=''
346
+ let g:yankring_v_key=''
347
+ let g:yankring_del_v_key=''
348
+ let g:yankring_paste_n_bkey=''
349
+ let g:yankring_paste_n_akey=''
350
+ let g:yankring_paste_v_key=''
351
+ let g:yankring_replace_n_pkey=''
352
+ let g:yankring_replace_n_nkey=''
353
+
354
+ " UltiSnips
355
+ let g:UltiSnipsExpandTrigger='<c-j>'
356
+ let g:UltiSnipsEditSplit='vertical'
357
+
358
+ " Emmet
359
+ " Usage: <Ctrl>e,
360
+ let g:user_emmet_leader_key='<c-e>'
361
+ let g:user_emmet_prevkey='<c-e>p'
362
+
363
+ " RubyRunner
364
+ let g:RubyRunner_key = '<Leader>e'
365
+ let g:RubyRunner_keep_focus_key = '<Leader>E'
366
+ let g:RubyRunner_open_below = 1
367
+ let g:RubyRunner_window_size = 10
368
+
369
+ " Vim-Javascript
370
+ " let g:javascript_enable_domhtmlcss = 1
371
+ " let g:used_javascript_libs = 'jquery,angularjs,angularui,jasmin,coffeescript'
372
+ " let g:syntastic_html_tidy_ignore_errors=[" proprietary attribute \"ng-"]
373
+ let g:html_indent_inctags = "html,body,head,tbody"
374
+
375
+ " Vroom
376
+ let g:vroom_clear_screen = 0
377
+ let g:vroom_use_binstubs = 1
378
+ let g:vroom_use_bundle_exec = 0
379
+
380
+ " ===================================================
381
+ " CUSTOM FUNCTIONS
382
+ " ===================================================
383
+ " Git
384
+ autocmd Filetype gitcommit setlocal spell textwidth=72
385
+ autocmd Filetype gitcommit setlocal colorcolumn=80
386
+
387
+ " Use The Silver Searcher https://github.com/ggreer/the_silver_searcher
388
+ if executable('ag')
389
+ let g:ackprg='ag --nogroup --column'
390
+
391
+ " Use Ag over Grep
392
+ set grepprg=ag\ --nogroup\ --nocolor
393
+
394
+ " Use ag in CtrlP for listing files. Lightning fast and respects .gitignore
395
+ let g:ctrlp_user_command='ag %s --hidden -l --nocolor -g ""'
396
+ endif
397
+
398
+ " Hide cursor crosshairs when not in focus
399
+ augroup cline
400
+ au!
401
+ au WinLeave,InsertEnter * set nocursorline
402
+ au WinLeave,InsertEnter * set nocursorcolumn
403
+ au WinEnter,InsertLeave * set cursorline
404
+ au WinEnter,InsertLeave * set cursorcolumn
405
+ augroup END
406
+
407
+ " Sets Quickfix window height
408
+ au FileType qf call AdjustWindowHeight(3, 30)
409
+ function! AdjustWindowHeight(minheight, maxheight)
410
+ exe max([min([line("$"), a:maxheight]), a:minheight]) . "wincmd _"
411
+ endfunction
412
+
413
+ " Clear register
414
+ function! <SID>ClearRegisters()
415
+ let regs='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/-="*+'
416
+ let i=0
417
+ while (i<strlen(regs))
418
+ exec 'let @'.regs[i].'=""'
419
+ let i=i+1
420
+ endwhile
421
+ endfunction
422
+ command! -nargs=0 ClearRegisters call <SID>ClearRegisters()
423
+
424
+ " Clear undo history
425
+ function! <SID>ForgetUndo()
426
+ let old_undolevels = &undolevels
427
+ set undolevels=-1
428
+ exe "normal a \<BS>\<esc>"
429
+ let &undolevels = old_undolevels
430
+ unlet old_undolevels
431
+ endfunction
432
+ command! -nargs=0 ClearUndo call <SID>ForgetUndo()
433
+
434
+ " Make JavaScript brackets close properly
435
+ augroup ft_javascript
436
+ au!
437
+ au Filetype javascript inoremap <buffer> {<cr> {}<left><cr><tab>.<cr><esc>kA<bs>
438
+ augroup END
439
+
440
+ " Pulse Line - used to highlight matches when navigating ctags
441
+ function! s:Pulse()
442
+ let current_window = winnr()
443
+ windo set nocursorline
444
+ execute current_window . 'wincmd w'
445
+ setlocal cursorline
446
+
447
+ redir => old_hi
448
+ silent execute 'hi CursorLine'
449
+ redir END
450
+ let old_hi = split(old_hi, '\n')[0]
451
+ let old_hi = substitute(old_hi, 'xxx', '', '')
452
+
453
+ let steps = 9
454
+ let width = 1
455
+ let start = width
456
+ let end = steps * width
457
+ let color = 233
458
+
459
+ for i in range(start, end, width)
460
+ execute "hi CursorLine ctermbg=" . (color + i)
461
+ redraw
462
+ sleep 6m
463
+ endfor
464
+ for i in range(end, start, -1 * width)
465
+ execute "hi CursorLine ctermbg=" . (color + i)
466
+ redraw
467
+ sleep 6m
468
+ endfor
469
+
470
+ execute 'hi ' . old_hi
471
+ endfunction
472
+ command! -nargs=0 Pulse call s:Pulse()