-
Notifications
You must be signed in to change notification settings - Fork 0
/
.vimrc-php
206 lines (161 loc) · 5.99 KB
/
.vimrc-php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Based on .vimrc of Jeffrey Way of https://laracasts.com
" https://gist.github.com/JeffreyWay/6753834
"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set nocompatible " Disable vi-compatibility
set t_Co=256
"colorscheme xoria256
"set guifont=menlo\ for\ powerline:h16
set guioptions-=T " Removes top toolbar
set guioptions-=r " Removes right hand scroll bar
set go-=L " Removes left hand scroll bar
"set linespace=15
" laravel uses tabs for indentation grr
" try settings recommended here:
" http://vim.wikia.com/wiki/Indent_with_tabs,_align_with_spaces
set noexpandtab
"set copyindent " set below
set preserveindent
set softtabstop=0
set shiftwidth=4
set tabstop=4
set showmode " always show what mode we're currently editing in
set nowrap " don't wrap lines
"set tabstop=4 " a tab is four spaces
"set smarttab
set tags=tags
"set softtabstop=4 " when hitting <BS>, pretend like a tab is removed, even if spaces
"set expandtab " expand tabs by default (overloadable per file type later)
"set shiftwidth=4 " number of spaces to use for autoindenting
set shiftround " use multiple of shiftwidth when indenting with '<' and '>'
set backspace=indent,eol,start " allow backspacing over everything in insert mode
set autoindent " always set autoindenting on
set copyindent " copy the previous indentation on autoindenting
set number " always show line numbers
set ignorecase " ignore case when searching
set smartcase " ignore case if search pattern is all lowercase,
set timeout timeoutlen=200 ttimeoutlen=100
set visualbell " don't beep
set noerrorbells " don't beep
set autowrite "Save on buffer switch
set mouse=a
" With a map leader it's possible to do extra key combinations
" like <leader>w saves the current file
let mapleader = ","
let g:mapleader = ","
" Fast saves
nmap <leader>w :w!<cr>
" Down is really the next line
"nnoremap j gj
"nnoremap k gk
" Easy escaping to normal model
"imap jj <esc>
"Auto change directory to match current file ,cd
nnoremap ,cd :cd %:p:h<CR>:pwd<CR>
"easier window navigation
"nmap <C-h> <C-w>h
"nmap <C-j> <C-w>j
"nmap <C-k> <C-w>k
"nmap <C-l> <C-w>l
" Resize vsplit
"nmap <C-v> :vertical resize +5<cr>
"nmap 25 :vertical resize 40<cr>
"nmap 50 <c-w>=
"nmap 75 :vertical resize 120<cr>
"nmap <C-b> :NERDTreeToggle<cr>
"Load the current buffer in Chrome
nmap ,c :!open -a Google\ Chrome<cr>
"Show (partial) command in the status line
"set showcmd
" Create split below
"nmap :sp :rightbelow sp<cr>
" Quickly go forward or backward to buffer
"nmap :bp :BufSurfBack<cr>
"nmap :bn :BufSurfForward<cr>
"highlight Search cterm=underline
" Swap files out of the project root
"set backupdir=~/.vim/backup//
"set directory=~/.vim/swap//
" Run PHPUnit tests
map <Leader>t :!phpunit %<cr>
" Easy motion stuff
"let g:EasyMotion_leader_key = '<Leader>'
" Powerline (Fancy thingy at bottom stuff)
"let g:Powerline_symbols = 'fancy'
"set laststatus=2 " Always show the statusline
"set encoding=utf-8 " Necessary to show Unicode glyphs
"set noshowmode " Hide the default mode text (e.g. -- INSERT -- below the statusline)
"autocmd cursorhold * set nohlsearch
"autocmd cursormoved * set hlsearch
" Remove search results
"command! H let @/=""
" If you prefer the Omni-Completion tip window to close when a selection is
" made, these lines close it on movement in insert mode or when leaving
" insert mode
"autocmd CursorMovedI * if pumvisible() == 0|pclose|endif
"autocmd InsertLeave * if pumvisible() == 0|pclose|endif
" Abbreviations
abbrev pft PHPUnit_Framework_TestCase
abbrev gm !php artisan generate:model
abbrev gc !php artisan generate:controller
abbrev gmig !php artisan generate:migration
" Auto-remove trailing spaces
"autocmd BufWritePre *.php :%s/\s\+$//e
" Edit todo list for project
nmap ,todo :e todo.txt<cr>
" Laravel framework commons
nmap <leader>lr :e app/routes.php<cr>
nmap <leader>lca :e app/config/app.php<cr>81Gf(%O
nmap <leader>lcd :e app/config/database.php<cr>
nmap <leader>lc :e composer.json<cr>
" Concept - load underlying class for Laravel
function! FacadeLookup()
let facade = input('Facade Name: ')
let classes = {
\ 'Form': 'Html/FormBuilder.php',
\ 'Html': 'Html/HtmlBuilder.php',
\ 'File': 'Filesystem/Filesystem.php',
\ 'Eloquent': 'Database/Eloquent/Model.php'
\ }
execute ":edit vendor/laravel/framework/src/Illuminate/" . classes[facade]
endfunction
nmap ,lf :call FacadeLookup()<cr>
" CtrlP Stuff
" Familiar commands for file/symbol browsing
"map <D-p> :CtrlP<cr>
"map <C-r> :CtrlPBufTag<cr>
" I don't want to pull up these folders/files when calling CtrlP
"set wildignore+=*/vendor/**
"set wildignore+=*/public/forum/**
" Open splits
"nmap vs :vsplit<cr>
"nmap sp :split<cr>
" Create/edit file in the current directory
nmap :ed :edit %:p:h/
" Prepare a new PHP class
function! Class()
let name = input('Class name? ')
let namespace = input('Any Namespace? ')
if strlen(namespace)
exec 'normal i<?php namespace ' . namespace . ';
else
exec 'normal i<?php
endif
" Open class
exec 'normal iclass ' . name . ' {^M}^[O^['
exec 'normal i^M public function __construct()^M{^M ^M}^['
endfunction
nmap ,1 :call Class()<cr>
" Add a new dependency to a PHP class
function! AddDependency()
let dependency = input('Var Name: ')
let namespace = input('Class Path: ')
let segments = split(namespace, '\')
let typehint = segments[-1]
exec 'normal gg/construct^M:H^Mf)i, ' . typehint . ' $' . dependency . '^[/}^>O$this->^[a' . dependency . ' = $' . dependency . ';^[?{^MkOprotected $' . dependency . ';^M^[?{^MOuse ' . namespace . ';^M^['
" Remove opening comma if there is only one dependency
exec 'normal :%s/(, /(/g
'
endfunction
nmap ,2 :call AddDependency()<cr>