Update windows setup notes
This commit is contained in:
parent
83a63be678
commit
761ef7815d
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -3,6 +3,7 @@ vim/bundle/*
|
|||
vim/plugged/*
|
||||
vim/undo
|
||||
vim/undo/*
|
||||
vim/autoload/plug.vim.old
|
||||
config/openbox/lxde-rc.xml
|
||||
*.pyc
|
||||
!bin
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
" Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
|
||||
" Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
|
||||
"
|
||||
" " Using a non-master branch
|
||||
" " Using a non-default branch
|
||||
" Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }
|
||||
"
|
||||
" " Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
|
||||
|
@ -106,7 +106,7 @@ if s:is_win && &shellslash
|
|||
else
|
||||
let s:me = resolve(expand('<sfile>:p'))
|
||||
endif
|
||||
let s:base_spec = { 'branch': 'master', 'frozen': 0 }
|
||||
let s:base_spec = { 'branch': '', 'frozen': 0 }
|
||||
let s:TYPE = {
|
||||
\ 'string': type(''),
|
||||
\ 'list': type([]),
|
||||
|
@ -116,6 +116,94 @@ let s:TYPE = {
|
|||
let s:loaded = get(s:, 'loaded', {})
|
||||
let s:triggers = get(s:, 'triggers', {})
|
||||
|
||||
function! s:is_powershell(shell)
|
||||
return a:shell =~# 'powershell\(\.exe\)\?$' || a:shell =~# 'pwsh\(\.exe\)\?$'
|
||||
endfunction
|
||||
|
||||
function! s:isabsolute(dir) abort
|
||||
return a:dir =~# '^/' || (has('win32') && a:dir =~? '^\%(\\\|[A-Z]:\)')
|
||||
endfunction
|
||||
|
||||
function! s:git_dir(dir) abort
|
||||
let gitdir = s:trim(a:dir) . '/.git'
|
||||
if isdirectory(gitdir)
|
||||
return gitdir
|
||||
endif
|
||||
if !filereadable(gitdir)
|
||||
return ''
|
||||
endif
|
||||
let gitdir = matchstr(get(readfile(gitdir), 0, ''), '^gitdir: \zs.*')
|
||||
if len(gitdir) && !s:isabsolute(gitdir)
|
||||
let gitdir = a:dir . '/' . gitdir
|
||||
endif
|
||||
return isdirectory(gitdir) ? gitdir : ''
|
||||
endfunction
|
||||
|
||||
function! s:git_origin_url(dir) abort
|
||||
let gitdir = s:git_dir(a:dir)
|
||||
let config = gitdir . '/config'
|
||||
if empty(gitdir) || !filereadable(config)
|
||||
return ''
|
||||
endif
|
||||
return matchstr(join(readfile(config)), '\[remote "origin"\].\{-}url\s*=\s*\zs\S*\ze')
|
||||
endfunction
|
||||
|
||||
function! s:git_revision(dir) abort
|
||||
let gitdir = s:git_dir(a:dir)
|
||||
let head = gitdir . '/HEAD'
|
||||
if empty(gitdir) || !filereadable(head)
|
||||
return ''
|
||||
endif
|
||||
|
||||
let line = get(readfile(head), 0, '')
|
||||
let ref = matchstr(line, '^ref: \zs.*')
|
||||
if empty(ref)
|
||||
return line
|
||||
endif
|
||||
|
||||
if filereadable(gitdir . '/' . ref)
|
||||
return get(readfile(gitdir . '/' . ref), 0, '')
|
||||
endif
|
||||
|
||||
if filereadable(gitdir . '/packed-refs')
|
||||
for line in readfile(gitdir . '/packed-refs')
|
||||
if line =~# ' ' . ref
|
||||
return matchstr(line, '^[0-9a-f]*')
|
||||
endif
|
||||
endfor
|
||||
endif
|
||||
|
||||
return ''
|
||||
endfunction
|
||||
|
||||
function! s:git_local_branch(dir) abort
|
||||
let gitdir = s:git_dir(a:dir)
|
||||
let head = gitdir . '/HEAD'
|
||||
if empty(gitdir) || !filereadable(head)
|
||||
return ''
|
||||
endif
|
||||
let branch = matchstr(get(readfile(head), 0, ''), '^ref: refs/heads/\zs.*')
|
||||
return len(branch) ? branch : 'HEAD'
|
||||
endfunction
|
||||
|
||||
function! s:git_origin_branch(spec)
|
||||
if len(a:spec.branch)
|
||||
return a:spec.branch
|
||||
endif
|
||||
|
||||
" The file may not be present if this is a local repository
|
||||
let gitdir = s:git_dir(a:spec.dir)
|
||||
let origin_head = gitdir.'/refs/remotes/origin/HEAD'
|
||||
if len(gitdir) && filereadable(origin_head)
|
||||
return matchstr(get(readfile(origin_head), 0, ''),
|
||||
\ '^ref: refs/remotes/origin/\zs.*')
|
||||
endif
|
||||
|
||||
" The command may not return the name of a branch in detached HEAD state
|
||||
let result = s:lines(s:system('git symbolic-ref --short HEAD', a:spec.dir))
|
||||
return v:shell_error ? '' : result[-1]
|
||||
endfunction
|
||||
|
||||
if s:is_win
|
||||
function! s:plug_call(fn, ...)
|
||||
let shellslash = &shellslash
|
||||
|
@ -154,6 +242,8 @@ function! plug#begin(...)
|
|||
let home = s:path(s:plug_fnamemodify(s:plug_expand(a:1), ':p'))
|
||||
elseif exists('g:plug_home')
|
||||
let home = s:path(g:plug_home)
|
||||
elseif has('nvim')
|
||||
let home = stdpath('data') . '/plugged'
|
||||
elseif !empty(&rtp)
|
||||
let home = s:path(split(&rtp, ',')[0]) . '/plugged'
|
||||
else
|
||||
|
@ -179,7 +269,7 @@ function! s:define_commands()
|
|||
endif
|
||||
if has('win32')
|
||||
\ && &shellslash
|
||||
\ && (&shell =~# 'cmd\(\.exe\)\?$' || &shell =~# 'powershell\(\.exe\)\?$')
|
||||
\ && (&shell =~# 'cmd\(\.exe\)\?$' || s:is_powershell(&shell))
|
||||
return s:err('vim-plug does not support shell, ' . &shell . ', when shellslash is set.')
|
||||
endif
|
||||
if !has('nvim')
|
||||
|
@ -262,7 +352,7 @@ function! plug#end()
|
|||
endif
|
||||
let lod = { 'ft': {}, 'map': {}, 'cmd': {} }
|
||||
|
||||
if exists('g:did_load_filetypes')
|
||||
if get(g:, 'did_load_filetypes', 0)
|
||||
filetype off
|
||||
endif
|
||||
for name in g:plugs_order
|
||||
|
@ -317,7 +407,7 @@ function! plug#end()
|
|||
|
||||
for [map, names] in items(lod.map)
|
||||
for [mode, map_prefix, key_prefix] in
|
||||
\ [['i', '<C-O>', ''], ['n', '', ''], ['v', '', 'gv'], ['o', '', '']]
|
||||
\ [['i', '<C-\><C-O>', ''], ['n', '', ''], ['v', '', 'gv'], ['o', '', '']]
|
||||
execute printf(
|
||||
\ '%snoremap <silent> %s %s:<C-U>call <SID>lod_map(%s, %s, %s, "%s")<CR>',
|
||||
\ mode, map, map_prefix, string(map), string(names), mode != 'i', key_prefix)
|
||||
|
@ -419,7 +509,7 @@ if s:is_win
|
|||
let batchfile = s:plug_tempname().'.bat'
|
||||
call writefile(s:wrap_cmds(a:cmd), batchfile)
|
||||
let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 0})
|
||||
if &shell =~# 'powershell\(\.exe\)\?$'
|
||||
if s:is_powershell(&shell)
|
||||
let cmd = '& ' . cmd
|
||||
endif
|
||||
return [batchfile, cmd]
|
||||
|
@ -646,25 +736,25 @@ function! s:parse_options(arg)
|
|||
endif
|
||||
let opts.tag = a:arg
|
||||
elseif type == s:TYPE.dict
|
||||
call extend(opts, a:arg)
|
||||
for opt in ['branch', 'tag', 'commit', 'rtp', 'dir', 'as']
|
||||
if has_key(opts, opt)
|
||||
\ && (type(opts[opt]) != s:TYPE.string || empty(opts[opt]))
|
||||
if has_key(a:arg, opt)
|
||||
\ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt]))
|
||||
throw printf(opt_errfmt, opt, 'string')
|
||||
endif
|
||||
endfor
|
||||
for opt in ['on', 'for']
|
||||
if has_key(opts, opt)
|
||||
\ && type(opts[opt]) != s:TYPE.list
|
||||
\ && (type(opts[opt]) != s:TYPE.string || empty(opts[opt]))
|
||||
if has_key(a:arg, opt)
|
||||
\ && type(a:arg[opt]) != s:TYPE.list
|
||||
\ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt]))
|
||||
throw printf(opt_errfmt, opt, 'string or list')
|
||||
endif
|
||||
endfor
|
||||
if has_key(opts, 'do')
|
||||
\ && type(opts.do) != s:TYPE.funcref
|
||||
\ && (type(opts.do) != s:TYPE.string || empty(opts.do))
|
||||
if has_key(a:arg, 'do')
|
||||
\ && type(a:arg.do) != s:TYPE.funcref
|
||||
\ && (type(a:arg.do) != s:TYPE.string || empty(a:arg.do))
|
||||
throw printf(opt_errfmt, 'do', 'string or funcref')
|
||||
endif
|
||||
call extend(opts, a:arg)
|
||||
if has_key(opts, 'dir')
|
||||
let opts.dir = s:dirpath(s:plug_expand(opts.dir))
|
||||
endif
|
||||
|
@ -720,7 +810,7 @@ function! s:syntax()
|
|||
syn match plugNumber /[0-9]\+[0-9.]*/ contained
|
||||
syn match plugBracket /[[\]]/ contained
|
||||
syn match plugX /x/ contained
|
||||
syn match plugDash /^-/
|
||||
syn match plugDash /^-\{1}\ /
|
||||
syn match plugPlus /^+/
|
||||
syn match plugStar /^*/
|
||||
syn match plugMessage /\(^- \)\@<=.*/
|
||||
|
@ -738,6 +828,7 @@ function! s:syntax()
|
|||
syn match plugError /^x.*/
|
||||
syn region plugDeleted start=/^\~ .*/ end=/^\ze\S/
|
||||
syn match plugH2 /^.*:\n-\+$/
|
||||
syn match plugH2 /^-\{2,}/
|
||||
syn keyword Function PlugInstall PlugStatus PlugUpdate PlugClean
|
||||
hi def link plug1 Title
|
||||
hi def link plug2 Repeat
|
||||
|
@ -850,7 +941,7 @@ function! s:prepare(...)
|
|||
call s:new_window()
|
||||
endif
|
||||
|
||||
nnoremap <silent> <buffer> q :if b:plug_preview==1<bar>pc<bar>endif<bar>bd<cr>
|
||||
nnoremap <silent> <buffer> q :call <SID>close_pane()<cr>
|
||||
if a:0 == 0
|
||||
call s:finish_bindings()
|
||||
endif
|
||||
|
@ -872,6 +963,15 @@ function! s:prepare(...)
|
|||
endif
|
||||
endfunction
|
||||
|
||||
function! s:close_pane()
|
||||
if b:plug_preview == 1
|
||||
pc
|
||||
let b:plug_preview = -1
|
||||
else
|
||||
bd
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! s:assign_name()
|
||||
" Assign buffer name
|
||||
let prefix = '[Plugins]'
|
||||
|
@ -890,7 +990,7 @@ function! s:chsh(swap)
|
|||
set shell=sh
|
||||
endif
|
||||
if a:swap
|
||||
if &shell =~# 'powershell\(\.exe\)\?$' || &shell =~# 'pwsh$'
|
||||
if s:is_powershell(&shell)
|
||||
let &shellredir = '2>&1 | Out-File -Encoding UTF8 %s'
|
||||
elseif &shell =~# 'sh' || &shell =~# 'cmd\(\.exe\)\?$'
|
||||
set shellredir=>%s\ 2>&1
|
||||
|
@ -991,10 +1091,11 @@ endfunction
|
|||
|
||||
function! s:checkout(spec)
|
||||
let sha = a:spec.commit
|
||||
let output = s:system(['git', 'rev-parse', 'HEAD'], a:spec.dir)
|
||||
if !v:shell_error && !s:hash_match(sha, s:lines(output)[0])
|
||||
let output = s:git_revision(a:spec.dir)
|
||||
if !empty(output) && !s:hash_match(sha, s:lines(output)[0])
|
||||
let credential_helper = s:git_version_requirement(2) ? '-c credential.helper= ' : ''
|
||||
let output = s:system(
|
||||
\ 'git fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir)
|
||||
\ 'git '.credential_helper.'fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir)
|
||||
endif
|
||||
return output
|
||||
endfunction
|
||||
|
@ -1109,7 +1210,8 @@ function! s:update_impl(pull, force, args) abort
|
|||
normal! 2G
|
||||
silent! redraw
|
||||
|
||||
let s:clone_opt = []
|
||||
" Set remote name, overriding a possible user git config's clone.defaultRemoteName
|
||||
let s:clone_opt = ['--origin', 'origin']
|
||||
if get(g:, 'plug_shallow', 1)
|
||||
call extend(s:clone_opt, ['--depth', '1'])
|
||||
if s:git_version_requirement(1, 7, 10)
|
||||
|
@ -1206,7 +1308,7 @@ function! s:update_finish()
|
|||
call s:log4(name, 'Checking out '.tag)
|
||||
let out = s:system('git checkout -q '.plug#shellescape(tag).' -- 2>&1', spec.dir)
|
||||
else
|
||||
let branch = get(spec, 'branch', 'master')
|
||||
let branch = s:git_origin_branch(spec)
|
||||
call s:log4(name, 'Merging origin/'.s:esc(branch))
|
||||
let out = s:system('git checkout -q '.plug#shellescape(branch).' -- 2>&1'
|
||||
\. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only '.plug#shellescape('origin/'.branch).' 2>&1')), spec.dir)
|
||||
|
@ -1446,7 +1548,7 @@ while 1 " Without TCO, Vim stack is bound to explode
|
|||
let [error, _] = s:git_validate(spec, 0)
|
||||
if empty(error)
|
||||
if pull
|
||||
let cmd = ['git', 'fetch']
|
||||
let cmd = s:git_version_requirement(2) ? ['git', '-c', 'credential.helper=', 'fetch'] : ['git', 'fetch']
|
||||
if has_tag && !empty(globpath(spec.dir, '.git/shallow'))
|
||||
call extend(cmd, ['--depth', '99999999'])
|
||||
endif
|
||||
|
@ -2130,7 +2232,7 @@ function! plug#shellescape(arg, ...)
|
|||
let script = get(opts, 'script', 1)
|
||||
if shell =~# 'cmd\(\.exe\)\?$'
|
||||
return s:shellesc_cmd(a:arg, script)
|
||||
elseif shell =~# 'powershell\(\.exe\)\?$' || shell =~# 'pwsh$'
|
||||
elseif s:is_powershell(shell)
|
||||
return s:shellesc_ps1(a:arg)
|
||||
endif
|
||||
return s:shellesc_sh(a:arg)
|
||||
|
@ -2182,7 +2284,7 @@ function! s:system(cmd, ...)
|
|||
return system(a:cmd)
|
||||
endif
|
||||
let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"shell": &shell, "script": 0})'))
|
||||
if &shell =~# 'powershell\(\.exe\)\?$'
|
||||
if s:is_powershell(&shell)
|
||||
let cmd = '& ' . cmd
|
||||
endif
|
||||
else
|
||||
|
@ -2211,18 +2313,17 @@ endfunction
|
|||
function! s:git_validate(spec, check_branch)
|
||||
let err = ''
|
||||
if isdirectory(a:spec.dir)
|
||||
let result = s:lines(s:system('git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url', a:spec.dir))
|
||||
let result = [s:git_local_branch(a:spec.dir), s:git_origin_url(a:spec.dir)]
|
||||
let remote = result[-1]
|
||||
if v:shell_error
|
||||
if empty(remote)
|
||||
let err = join([remote, 'PlugClean required.'], "\n")
|
||||
elseif !s:compare_git_uri(remote, a:spec.uri)
|
||||
let err = join(['Invalid URI: '.remote,
|
||||
\ 'Expected: '.a:spec.uri,
|
||||
\ 'PlugClean required.'], "\n")
|
||||
elseif a:check_branch && has_key(a:spec, 'commit')
|
||||
let result = s:lines(s:system('git rev-parse HEAD 2>&1', a:spec.dir))
|
||||
let sha = result[-1]
|
||||
if v:shell_error
|
||||
let sha = s:git_revision(a:spec.dir)
|
||||
if empty(sha)
|
||||
let err = join(add(result, 'PlugClean required.'), "\n")
|
||||
elseif !s:hash_match(sha, a:spec.commit)
|
||||
let err = join([printf('Invalid HEAD (expected: %s, actual: %s)',
|
||||
|
@ -2230,8 +2331,9 @@ function! s:git_validate(spec, check_branch)
|
|||
\ 'PlugUpdate required.'], "\n")
|
||||
endif
|
||||
elseif a:check_branch
|
||||
let branch = result[0]
|
||||
let current_branch = result[0]
|
||||
" Check tag
|
||||
let origin_branch = s:git_origin_branch(a:spec)
|
||||
if has_key(a:spec, 'tag')
|
||||
let tag = s:system_chomp('git describe --exact-match --tags HEAD 2>&1', a:spec.dir)
|
||||
if a:spec.tag !=# tag && a:spec.tag !~ '\*'
|
||||
|
@ -2239,14 +2341,14 @@ function! s:git_validate(spec, check_branch)
|
|||
\ (empty(tag) ? 'N/A' : tag), a:spec.tag)
|
||||
endif
|
||||
" Check branch
|
||||
elseif a:spec.branch !=# branch
|
||||
elseif origin_branch !=# current_branch
|
||||
let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.',
|
||||
\ branch, a:spec.branch)
|
||||
\ current_branch, origin_branch)
|
||||
endif
|
||||
if empty(err)
|
||||
let [ahead, behind] = split(s:lastline(s:system([
|
||||
\ 'git', 'rev-list', '--count', '--left-right',
|
||||
\ printf('HEAD...origin/%s', a:spec.branch)
|
||||
\ printf('HEAD...origin/%s', origin_branch)
|
||||
\ ], a:spec.dir)), '\t')
|
||||
if !v:shell_error && ahead
|
||||
if behind
|
||||
|
@ -2254,11 +2356,11 @@ function! s:git_validate(spec, check_branch)
|
|||
" pushable (and probably not that messed up).
|
||||
let err = printf(
|
||||
\ "Diverged from origin/%s (%d commit(s) ahead and %d commit(s) behind!\n"
|
||||
\ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', a:spec.branch, ahead, behind)
|
||||
\ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', origin_branch, ahead, behind)
|
||||
else
|
||||
let err = printf("Ahead of origin/%s by %d commit(s).\n"
|
||||
\ .'Cannot update until local changes are pushed.',
|
||||
\ a:spec.branch, ahead)
|
||||
\ origin_branch, ahead)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
@ -2519,26 +2621,34 @@ function! s:preview_commit()
|
|||
|
||||
let sha = matchstr(getline('.'), '^ \X*\zs[0-9a-f]\{7,9}')
|
||||
if empty(sha)
|
||||
return
|
||||
let name = matchstr(getline('.'), '^- \zs[^:]*\ze:$')
|
||||
if empty(name)
|
||||
return
|
||||
endif
|
||||
let title = 'HEAD@{1}..'
|
||||
let command = 'git diff --no-color HEAD@{1}'
|
||||
else
|
||||
let title = sha
|
||||
let command = 'git show --no-color --pretty=medium '.sha
|
||||
let name = s:find_name(line('.'))
|
||||
endif
|
||||
|
||||
let name = s:find_name(line('.'))
|
||||
if empty(name) || !has_key(g:plugs, name) || !isdirectory(g:plugs[name].dir)
|
||||
return
|
||||
endif
|
||||
|
||||
if exists('g:plug_pwindow') && !s:is_preview_window_open()
|
||||
execute g:plug_pwindow
|
||||
execute 'e' sha
|
||||
execute 'e' title
|
||||
else
|
||||
execute 'pedit' sha
|
||||
execute 'pedit' title
|
||||
wincmd P
|
||||
endif
|
||||
setlocal previewwindow filetype=git buftype=nofile nobuflisted modifiable
|
||||
setlocal previewwindow filetype=git buftype=nofile bufhidden=wipe nobuflisted modifiable
|
||||
let batchfile = ''
|
||||
try
|
||||
let [sh, shellcmdflag, shrd] = s:chsh(1)
|
||||
let cmd = 'cd '.plug#shellescape(g:plugs[name].dir).' && git show --no-color --pretty=medium '.sha
|
||||
let cmd = 'cd '.plug#shellescape(g:plugs[name].dir).' && '.command
|
||||
if s:is_win
|
||||
let [batchfile, cmd] = s:batchfile(cmd)
|
||||
endif
|
||||
|
@ -2588,20 +2698,23 @@ function! s:diff()
|
|||
endif
|
||||
call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:')
|
||||
for [k, v] in plugs
|
||||
let range = origin ? '..origin/'.v.branch : 'HEAD@{1}..'
|
||||
let cmd = ['git', 'log', '--graph', '--color=never']
|
||||
if s:git_version_requirement(2, 10, 0)
|
||||
call add(cmd, '--no-show-signature')
|
||||
endif
|
||||
call extend(cmd, ['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range])
|
||||
if has_key(v, 'rtp')
|
||||
call extend(cmd, ['--', v.rtp])
|
||||
endif
|
||||
let diff = s:system_chomp(cmd, v.dir)
|
||||
if !empty(diff)
|
||||
let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : ''
|
||||
call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)')))
|
||||
let cnts[origin] += 1
|
||||
let branch = s:git_origin_branch(v)
|
||||
if len(branch)
|
||||
let range = origin ? '..origin/'.branch : 'HEAD@{1}..'
|
||||
let cmd = ['git', 'log', '--graph', '--color=never']
|
||||
if s:git_version_requirement(2, 10, 0)
|
||||
call add(cmd, '--no-show-signature')
|
||||
endif
|
||||
call extend(cmd, ['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range])
|
||||
if has_key(v, 'rtp')
|
||||
call extend(cmd, ['--', v.rtp])
|
||||
endif
|
||||
let diff = s:system_chomp(cmd, v.dir)
|
||||
if !empty(diff)
|
||||
let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : ''
|
||||
call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)')))
|
||||
let cnts[origin] += 1
|
||||
endif
|
||||
endif
|
||||
let bar .= '='
|
||||
call s:progress_bar(2, bar, len(total))
|
||||
|
@ -2661,9 +2774,9 @@ function! s:snapshot(force, ...) abort
|
|||
1
|
||||
let anchor = line('$') - 3
|
||||
let names = sort(keys(filter(copy(g:plugs),
|
||||
\'has_key(v:val, "uri") && !has_key(v:val, "commit") && isdirectory(v:val.dir)')))
|
||||
\'has_key(v:val, "uri") && isdirectory(v:val.dir)')))
|
||||
for name in reverse(names)
|
||||
let sha = s:system_chomp(['git', 'rev-parse', '--short', 'HEAD'], g:plugs[name].dir)
|
||||
let sha = has_key(g:plugs[name], 'commit') ? g:plugs[name].commit : s:git_revision(g:plugs[name].dir)
|
||||
if !empty(sha)
|
||||
call append(anchor, printf("silent! let g:plugs['%s'].commit = '%s'", name, sha))
|
||||
redraw
|
||||
|
|
2
vimrc
2
vimrc
|
@ -1189,7 +1189,7 @@ function! Search(case_sensitive, search_args)
|
|||
|
||||
"@note --pretty (i.e. colors) is not enabled in vim-ripgrep because the
|
||||
"quickfix window doesn't seem to parse the ansi color codes.
|
||||
let l:rg_args = "--column --line-number --no-heading --fixed-strings --no-ignore --hidden --follow --trim -g \"!tags\" " . a:search_args
|
||||
let l:rg_args = "--column --line-number --no-heading --fixed-strings --no-ignore --hidden --follow --trim -g \"!tags\" -g \"!.git/\" -g \"!AppData/\" " . a:search_args
|
||||
|
||||
if !a:case_sensitive
|
||||
let l:rg_args .= " --ignore-case"
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
UseSystemStylus 0
|
|
@ -24,8 +24,8 @@
|
|||
# Michael's custom block list
|
||||
#----------------------------------------------
|
||||
|
||||
# Block Sublime's annoying "there's an update" dialog
|
||||
127.0.0.1 www.sublimetext.com
|
||||
# Block Sublime license check
|
||||
127.0.0.1 license.sublimehq.com
|
||||
|
||||
# Block Spotify update
|
||||
127.0.0.1 upgrade.spotify.com
|
||||
|
|
|
@ -1,18 +1,53 @@
|
|||
# Windows Setup
|
||||
|
||||
* Make a system restore point after a fresh install
|
||||
|
||||
* Change PC name and reboot
|
||||
|
||||
* Disable `Enhance Pointer Precision`:
|
||||
* Mouse Properties -> Pointer Options -> Motion section
|
||||
|
||||
* Laptop: change touchpad sensitivity to medium or high in order to prevent mouse movement when palm touches the pad while typing.
|
||||
* If using a Lenovo then disable touchpad lock in the Lenovo Vantage app.
|
||||
|
||||
* Map caps key to left-ctrl using Sharpkeys.
|
||||
|
||||
* Download [O&O ShutUp10](https://www.oo-software.com/en/shutup10) and disable things.
|
||||
|
||||
* Install Open-Shell to restore the start menu to the sensible Windows 7 style.
|
||||
|
||||
* Pin "This PC" to taskbar
|
||||
* In Win 10 start menu, search for "This PC", right click top result and pin to taskbar
|
||||
|
||||
* Configure Explorer's options
|
||||
* Open file explorer, click on File menu then options or "Change folder and search options"
|
||||
* General tab
|
||||
* `Open File Explorer to: This PC`
|
||||
* Uncheck `Show recently used files in Quick access`
|
||||
* Uncheck `Show frequently used folder in Quick access`
|
||||
* View tab
|
||||
* Check `Show hidden files, folders, or drives`,
|
||||
* Uncheck `Hide extensions for known file types`
|
||||
|
||||
* Disable reopening apps on startup
|
||||
* Windows settings -> Account -> Sign in options -> Privacy section: turn off `Use my sign-in info to automatically finish setting up device`
|
||||
|
||||
* Disable window suggestion when snapping a window
|
||||
* Windows settings -> System -> Multitasking -> uncheck "When I snap a window, show what I can snap next to it"
|
||||
|
||||
* Desktop: turn off hibernation
|
||||
* Open admin cmd prompt: `powercfg.exe /hibernate off`
|
||||
* Open admin cmd prompt: `powercfg.exe /hibernate off`
|
||||
|
||||
* Disable power throttling:
|
||||
* Windows key + r, `gpedit.msc`.
|
||||
* Computer Configuration > Administrative Templates > System > Power Management > Power Throttling Settings.
|
||||
* Double-click the `Turn off Power Throttling` policy.
|
||||
* Select Enabled.
|
||||
* winkey+r -> `gpedit.msc`.
|
||||
* Computer Configuration > Administrative Templates > System > Power Management > Power Throttling Settings
|
||||
* Double-click the `Turn off Power Throttling` policy.
|
||||
* Select Enabled.
|
||||
|
||||
* Disable reserved bandwidth
|
||||
* Windows key + r, `gpedit.msc`.
|
||||
* Disable reserved network bandwidth
|
||||
* winkey+r -> `gpedit.msc`.
|
||||
* Computer Configuration > Administrative Templates > Network > QoS Packet Scheduler > Limit reservable bandwidth
|
||||
* Enable it and set the % to 0.
|
||||
* Enable it and set the % to 0.
|
||||
|
||||
* Enable ultimate power plan (alternatively make a new plan and set the min/max processor speed to 100%)
|
||||
* Open cmd as admin, run `powercfg -duplicatescheme e9a42b02-d5df-448d-aa00-03f14749eb61`
|
||||
|
@ -20,31 +55,51 @@
|
|||
|
||||
* Create a power plan for software benchmarking
|
||||
* This will disable turbo boost and general lock the frequency to base-ish clock. This can help
|
||||
keep cpu temps stable (hot temps affect clock) and it avoids variable clock changes.
|
||||
keep CPU temps stable (hot temps affect clock) and it avoids variable clock changes.
|
||||
* AFAIK this only works for Intel CPUs; not sure how to do the same thing on AMD.
|
||||
* In the power plan set the processor min/max speed to 99%.
|
||||
|
||||
* Disable UAC screen dimming
|
||||
* Open User Account Control settings
|
||||
* Drag the slider down one notch to remove the dimming
|
||||
|
||||
* Disable Windows error reporting dialog so that when stuff crashes you can get to a debugger faster.
|
||||
* Open an admin cmd prompt and run the file `disable-windows-error-reporting-dialog.bat` from this directory.
|
||||
|
||||
* Optional: disable Windows Defender real-time protection:
|
||||
* Disable the WinSAT task which is used to figure out your Windows performance score. It eats up
|
||||
processor time and is generally useless.
|
||||
* Open task scheduler.
|
||||
* **note** If you see an error about a selected task {0} no longer existing then you'll need
|
||||
to repair the task scheduler. See
|
||||
https://www.thewindowsclub.com/the-selected-task-0-no-longer-exists-error-in-task-scheduler
|
||||
* Go to `Local` -> `Microsoft` -> `Maintenance` and disable the WinSAT task.
|
||||
|
||||
* Disable the Windows Customer Experience Improvement program via group policy
|
||||
https://web.archive.org/web/20200131202352/https://www.ghacks.net/2016/10/26/turn-off-the-windows-customer-experience-program/
|
||||
|
||||
* Increase TDR setting for GPU Driver
|
||||
* TDR determines the length of time that a GPU can hang on a computation until the OS restarts
|
||||
the driver. By default this is set to a few seconds so you can experience app crashes when
|
||||
using GPU intensive software, like 3D modeling or texturing. To increase the duration, follow
|
||||
this guide: https://web.archive.org/web/20191107173337/https://docs.substance3d.com/spdoc/gpu-drivers-crash-with-long-computations-128745489.html
|
||||
|
||||
* **Optional:** disable Windows Defender real-time protection:
|
||||
* This can speed up compilation times since Defender will scan every file written to disk. I was
|
||||
able to shave off ~2-5 seconds in a particular project.
|
||||
* If you'd rather keep real-time protection active then you can add specific files or
|
||||
folders to the Defender exclusion list in the Windows Security settings, however I did
|
||||
some testing and didn't see any speedup when excluding a project folder.
|
||||
* Go into the Windows security settings and disable `Tamper Protection`.
|
||||
* Start menu, search for `gpedit.msc`.
|
||||
* Computer Configuration > Administrative Templates > Windows Components > Microsoft Defender Antivirus -> Real-time Protection
|
||||
* Double-click the `Turn off real-time protection` policy.
|
||||
* Select Enabled (you may have to restart PC).
|
||||
* If you want to re-enable then change the policy to `Not configured` and re-enable tamper protection.
|
||||
* winkey+r -> `gpedit.msc`.
|
||||
* Computer Configuration > Administrative Templates > Windows Components > Microsoft Defender Antivirus -> Real-time Protection
|
||||
* Double-click the `Turn off real-time protection` policy.
|
||||
* Select Enabled (you may have to restart PC).
|
||||
* If you want to re-enable then change the policy to `Not configured` and re-enable tamper protection.
|
||||
|
||||
* Disable `Enhance Pointer Precision`:
|
||||
* Mouse Properties -> Pointer Options -> Motion section
|
||||
|
||||
* Disable various Window features:
|
||||
* Enable/disable various Window features:
|
||||
* Go to Add/Remove Programs -> Turn Windows features on or off
|
||||
* Enable:
|
||||
* Windows hypervisor platform
|
||||
* Disable:
|
||||
* Internet Explorer 11
|
||||
* Legacy Components - DirectPlay
|
||||
|
@ -53,12 +108,7 @@
|
|||
* Microsoft XPS Document Writer (and any other XPS components)
|
||||
* Print and Document Services - Internet Printing Client & Windows Fax and Scan
|
||||
* Windows PowerShell 2.0 (current version is 5+ as of 2021-03-05)
|
||||
|
||||
* Laptop: change touchpad sensitivity to medium or high in order to prevent mouse movement when palm
|
||||
touches the pad while typing.
|
||||
* If using a Lenovo then disable touchpad lock in the Lenovo Vantage app.
|
||||
|
||||
* Map caps to left-ctrl using sharpkeys
|
||||
* Work folders client
|
||||
|
||||
* Restore classic Windows Photo Viewer app (the default Win10 photos app is fucking awful):
|
||||
* Run photo_viewer.reg from this folder.
|
||||
|
@ -72,18 +122,10 @@
|
|||
* Open C:/Windows/System32/Drivers/etc/hosts
|
||||
* Add contents of the hosts file from this directory
|
||||
* Restart PC
|
||||
* Note: POS Windows may periodically reset this file to the default state so you'll want to
|
||||
check it every so often.
|
||||
* Note: Windows Defender is going to alert you about the change. Tell it to ignore. Also, POS Windows will periodically reset this file to the default state so you'll want to check it every so often.
|
||||
|
||||
* Change explorer options so that file extensions are always displayed.
|
||||
|
||||
* Disable the WinSAT task which is used to figure out your Windows performance score. It eats up
|
||||
processor time and is generally useless.
|
||||
* Open task scheduler.
|
||||
* **note** If you see an error about a selected task {0} no longer existing then you'll need
|
||||
to repair the task scheduler. See
|
||||
https://www.thewindowsclub.com/the-selected-task-0-no-longer-exists-error-in-task-scheduler
|
||||
* Go to `Local` -> `Microsoft` -> `Maintenance` and disable the WinSAT task.
|
||||
* Install the Windows SDK https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk
|
||||
* Will install to c:\Program Files (x86)\Windows Kits\10
|
||||
|
||||
* Setup a symbol server:
|
||||
* Right-click My Computer -> Properties -> Advanced Tab -> Environment Variables
|
||||
|
@ -93,194 +135,12 @@ processor time and is generally useless.
|
|||
|
||||
* Configure crash dump storage location for projects via the registry.
|
||||
|
||||
* Increase TDR setting for GPU Driver
|
||||
* TDR determines the length of time that a GPU can hang on a computation until the OS restarts
|
||||
the driver. By default this is set to a few seconds so you can experience app crashes when
|
||||
using GPU intensive software, like 3D modeling or texturing. To increase the duration, follow
|
||||
this guide: https://web.archive.org/web/20191107173337/https://docs.substance3d.com/spdoc/gpu-drivers-crash-with-long-computations-128745489.html
|
||||
* Disable various web trackers using browserleaks.com as a guide.
|
||||
* e.g. disable WebGL, canvas fingerprinting, geolocation, font fingerprint, etc.
|
||||
|
||||
## Windows 7 Stuff
|
||||
* Turn off various startup processes
|
||||
* ctrl+shift+esc -> startup
|
||||
|
||||
* Enable clear text
|
||||
* Disable Win 7 Fault Tolerant Heap
|
||||
* I know know why anyone would want to spend large amounts of CPU time to hide application instability.
|
||||
* https://docs.microsoft.com/en-us/windows/desktop/Win7AppQual/fault-tolerant-heap
|
||||
* Disable on system via regedit: set the REG_DWORD value `HKLM\\Software\\Microsoft\\FTH\\Enabled` to `0`.
|
||||
|
||||
## Windows 10 Stuff
|
||||
|
||||
* Disable the Windows Customer Experience Improvement program via group policy
|
||||
https://www.ghacks.net/2016/10/26/turn-off-the-windows-customer-experience-program/
|
||||
* Install the Windows SDK https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk
|
||||
* Will install to c:\Program Files (x86)\Windows Kits\10
|
||||
* Download [O&O ShutUp10](https://www.oo-software.com/en/shutup10) and disable things.
|
||||
|
||||
## Setup Terminal
|
||||
* Install [MSYS2 w/ MinGW-w64](http://www.msys2.org/) to `C:\msys64`
|
||||
* MinGW is intended for developing native Windows applications. MSYS is for developing software
|
||||
that runs inside of the MSYS2 posix-like env with FHS style filesystem naming (i.e. MSYS2
|
||||
tools/packages).
|
||||
* Open `C:\msys64\mingw64.exe`
|
||||
* Run `pacman -Syu`, then restart the terminal and run `pacman -Su`.
|
||||
* Run `pacman -S base-devel mingw-w64-x86_64-toolchain bc`
|
||||
* Use `C:\Users\<user>` as the terminal $HOME by editing `C:\msys64\etc\nsswitch.conf` and
|
||||
changing the `db_home` value to `windows`.
|
||||
* You may need to work around an issue with envsubst.exe - you'll know there's a bug if git
|
||||
displays `not a valid identifier line 89: export: dashless` or rebase complains about `new_count`.
|
||||
* To patch, cd into `/mingw64/bin` and run `mv envsubst.exe envsubst.exe_backup`. Now run `pacman -S gettext`
|
||||
and verify that `which envsubst` reports back `/usr/bin/envsubst`.
|
||||
* Bug report is at https://github.com/Alexpux/MSYS2-packages/issues/735
|
||||
* Use `C:\msys64\mingw64.exe` if you want to compile native binaries and `C:\msys64\msys2.exe` to build msys binaries.
|
||||
* You can also load the shell with a batch file. This allows you to do some setup work, like run `vcvarsall.bat`, eg.
|
||||
```batch
|
||||
REM saved as shell-64.bat
|
||||
@echo off
|
||||
|
||||
REM For VS2015:
|
||||
call "drive:\path-to-vs2015\VC\vcvarsall.bat" x64
|
||||
|
||||
REM For VS2017:
|
||||
REM call "drive:\path-to-vs2017\VC\Auxiliary\Build\vcvarsall.bat" x64
|
||||
|
||||
REM For VS2019:
|
||||
REM call "drive:\path-to-vs2019\VC\Auxiliary\Build\vcvarsall.bat" x64
|
||||
|
||||
REM Disable CRT heap debug stuff. See https://preshing.com/20110717/the-windows-heap-is-slow-when-launched-from-the-debugger/
|
||||
set _NO_DEBUG_HEAP=1
|
||||
|
||||
call C:\msys64\msys2_shell.cmd -mingw64 -use-full-path
|
||||
exit
|
||||
```
|
||||
* This will launch a 64-bit env. If you need 32-bit then replace x64 above with x86.
|
||||
* Now you can make a system32 cmd line shortcut that will be used to launch the batch file. e.g.
|
||||
* `target:` `%windir%\System32\cmd.exe /k drive:\path-to-bat-file\shell-64.bat`
|
||||
* `start in:` `drive:\some-path`
|
||||
* Setup git completions for bash (note: shouldn't have to do this if you ran the install script):
|
||||
* `curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash`
|
||||
|
||||
### 32-bit dev tools
|
||||
* Load a 32-bit shell
|
||||
* Install toolchain: `pacman -S mingw-w64-i686-toolchain`
|
||||
|
||||
## Setting up dev tools
|
||||
|
||||
* Download the Windows 2003 Resource Kit in order to get tools like `list.exe` (command line hex
|
||||
editor)
|
||||
* URL: https://www.microsoft.com/en-us/download/details.aspx?id=17657
|
||||
* Installer will display a compatibility warning. Ignore it.
|
||||
* Full list of tools can be found here
|
||||
https://www.technlg.net/windows/download-windows-resource-kit-tools/
|
||||
|
||||
## Setting up Vim
|
||||
|
||||
### Compiling on Windows (optional)
|
||||
|
||||
* Open the shell with `C:\msys64\msys2_shell.cmd` -- If you don't do this then vim will not compile.
|
||||
* Run `pacman -S --needed base-devel msys2-devel gawk perl python2 python3 ruby libiconv ncurses-devel libcrypt-devel`
|
||||
* Clone MSYS2 packages: `https://github.com/msys2/MSYS2-packages`
|
||||
* cd into the vim package
|
||||
* Edit `PKGBUILD` and change the version number to the one you want to build. You can see the available versions at `https://github.com/vim/vim`
|
||||
* Run `makepkg`
|
||||
* If checksums fail then generate new ones: `makepkg -g -f -p PKGBUILD`, copy the output, edit `PKGBUILD` and replace the checksums array with the new values.
|
||||
* Run `makepkg` again
|
||||
* If it fails to apply a patch then you'll need to make the fixes yourself:
|
||||
* Clone vim (`https://github.com/vim/vim`), cd into `vim/src`.
|
||||
* Modify the file(s) that they failed patch was changing and make the correct fixes.
|
||||
* Commit the change.
|
||||
* Generate a patch file with `git diff commitid1 commitid2 > newpatch.patch`
|
||||
* Copy the patch to `MSYS2-packages/vim` and use the same name as the original patch that failed.
|
||||
* Regen the pkg checksums and add them to `PKGBUILD`.
|
||||
* Run `makepkg` again.
|
||||
|
||||
* Once built, install it with `pacman -U ${package-name}*.pkg.tar.xz`
|
||||
|
||||
### Configuring
|
||||
|
||||
1. Open Vim and run `:PlugInstall` to fetch all plugins.
|
||||
2. Create a tmp folder for swap files (i.e. `set directory` and `set backupdir`). Place these
|
||||
at `~/.vimrc.private` so that the main vimrc file can source it. We do it this way so that you
|
||||
can have a tmp folder path that is specific to your setup.
|
||||
|
||||
### Setting up Custom Search
|
||||
|
||||
* First install Rust. See `Setting up Rust` below.
|
||||
* Setup `ripgrep`:
|
||||
* Open an `msvc x64` shell and run `cargo install ripgrep`. **Note** the last time I did this
|
||||
I got linker errors saying that it was trying to link an x86 exe in a 64-bit env. I had to run
|
||||
the `msvc x86` shell instead.
|
||||
* Verify it works by running `rg` in a shell.
|
||||
* You may get compilation errors when updating the package. This are likely the result of having an outdated Rust compiler. Try running `rustup update` and then retry the package installation.
|
||||
|
||||
### Setting up ctags
|
||||
|
||||
* Download the latest Universal ctags build: https://github.com/universal-ctags/ctags-win32/releases
|
||||
* Place ctags.exe and readtags.exe in `~/bin` or in `~/.dev/tools`.
|
||||
|
||||
## Setting up Visual Studio
|
||||
|
||||
* Use an install path with no spaces in it `/x/programs/vs15`
|
||||
* Select custom install and check off the C++ language support.
|
||||
* Once installed, open Visual Studio and go to `Tools` -> `Options`. Open `Debugging` -> `Symbols`
|
||||
and add the path to the cached symbols directory that you set up above under `Setup a symbol server`.
|
||||
* Open the `Visual Studio Layout` folder in this directory and copy the file to `%LOCALAPPDATA%/Microsoft/VisualStudio/{VisualStudioInstanceID}`.
|
||||
You can now apply the custom layout in VS: `Window -> Apply Window Layout -> Campo`
|
||||
|
||||
## Setting up Cygwin
|
||||
|
||||
* Can create symlinks to dotfiles using the git bash shell. The cygwin home directory
|
||||
is likely going to be `C:\cygwin\home\<username>`.
|
||||
* Build [rlwrap](https://github.com/hanslub42/rlwrap)
|
||||
|
||||
## Setting up Rust
|
||||
|
||||
* Install `rustup`: https://win.rustup.rs/
|
||||
|
||||
## Setting up Go
|
||||
|
||||
* Installer: https://golang.org/doc/install
|
||||
|
||||
## Setting up Clojure
|
||||
|
||||
* Install Lein: https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein.bat
|
||||
|
||||
## Setting up Xbox stuff
|
||||
|
||||
* Install the xbox controller drivers
|
||||
* Turn off stats collection
|
||||
* cmd-r, msconfig.exe, startup tab, uncheck `Microsoft Xbox 360 Accessories`.
|
||||
|
||||
## Turn off various startup processes
|
||||
* cmd-r -> msconfig.exe -> startup tab
|
||||
|
||||
## Setting up Wacom tablet
|
||||
|
||||
* Install the shitty Wacom driver.
|
||||
* Preemptively deal with future issues in Photoshop by saving the `PSUserConfig.txt` file
|
||||
in this directory to `%APPDATA%\Adobe\Adobe Photoshop XX\Adobe Photoshop XX Settings` (should take you to AppData/Roaming)
|
||||
* In Wacom tablet settings look at the mapping tab and make sure "Use Windows Ink" is unchecked.
|
||||
* These steps are from [FlippedNormals - Fixing All Issues with Your Wacom Tablet and Photoshop](https://www.youtube.com/watch?v=sGi47EWEkuY)
|
||||
|
||||
## Software
|
||||
|
||||
* Install [Desktop Restore](http://www.midiox.com/index.htm?http://midiox.com/desktoprestore.htm)
|
||||
|
||||
* Install Android platform tools to get adb.exe:
|
||||
* Download [Android commandline tools](https://developer.android.com/studio/#downloads)
|
||||
* Unzip and place the contents into the folders `cmdline-tools/tools/`
|
||||
* Run the sdkmanager.bat script to install the tools: `$ ./cmdline-tools/tools/bin/sdkmanager.bat "platform-tools"`
|
||||
* You can now add the platform-tools dir to your path if you want, or just symlink `adb` to `~/bin`.
|
||||
|
||||
### Youtube-DL
|
||||
* In order to combine audio and video files you need ffmpeg. Download from https://ffmpeg.zeranoe.com/builds/
|
||||
and place the exe's in `~/bin`.
|
||||
|
||||
### Spotify
|
||||
* If you install an older version then you'll need to block the auto updater:
|
||||
* Go to `%APPDATA%\Spotify` and create `Spotify_new.exe` and `Spotify_new.exe.sig`
|
||||
* Set both as read-only. I did this by denying all permissions to the active user account.
|
||||
* Spotify caches song data in `C:\Users\<user>\AppData\Local\Spotify\Data` and this path cannot be
|
||||
modified within the app settings. This is an issue if your main drive is an SSD, as you want to
|
||||
limit the amount of writes to it and you may not have a lot of free space. The simplest way I
|
||||
found to stop this is to change the `Data` folder's permissions (under the Security tab) and deny
|
||||
all properties for the user account.
|
||||
* Disable unneeded services
|
||||
|
||||
* Do a pass over all Windows setting screens for anything obvious that wasn't covered here.
|
||||
|
|
Loading…
Reference in New Issue
Block a user