rails-ahoy 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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()