From 74e70d5613813fb731614dbdb4c9f722263a9cd0 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 9 Jan 2022 08:44:06 +0100 Subject: Merging upstream version 0.16.1. Signed-off-by: Daniel Baumann --- .gita-completion.bash | 2 + Makefile | 4 +- README.md | 15 +- doc/README_CN.md | 2 +- doc/video-outline.png | Bin 0 -> 168883 bytes gita/__main__.py | 56 ++-- gita/common.py | 15 +- gita/utils.py | 100 +++---- setup.py | 2 +- tests/conftest.py | 1 - tests/main_path_file | 2 - tests/test_main.py | 5 +- tests/test_utils.py | 2 +- work.vim | 766 -------------------------------------------------- 14 files changed, 83 insertions(+), 889 deletions(-) create mode 100644 doc/video-outline.png delete mode 100644 tests/main_path_file delete mode 100644 work.vim diff --git a/.gita-completion.bash b/.gita-completion.bash index 493db05..cad120c 100644 --- a/.gita-completion.bash +++ b/.gita-completion.bash @@ -3,10 +3,12 @@ _gita_completions() { local cur commands repos cmd + local IFS=$'\n\t ' cur=${COMP_WORDS[COMP_CWORD]} cmd=${COMP_WORDS[1]} + # this doesn't work for two repos with the same basename #gita_path=${XDG_CONFIG_HOME:-$HOME/.config}/gita/repo_path #repos=`awk '{split($0, paths, ":")} END {for (i in paths) {n=split(paths[i],b, /\//); print b[n]}}' ${gita_path}` diff --git a/Makefile b/Makefile index c67d4a7..c2db6b9 100644 --- a/Makefile +++ b/Makefile @@ -2,9 +2,9 @@ install: pip3 install -e . -test: clean +test: pytest tests --cov=./gita $(TEST_ARGS) -n=auto -dist: clean +dist: python3 setup.py sdist twine: twine upload dist/* diff --git a/README.md b/README.md index d54ec25..746af4b 100644 --- a/README.md +++ b/README.md @@ -14,18 +14,15 @@ | | ____ | | | | | ___ | | | \_ ) | | | | | ( ) | | (___) |__) (___ | | | ) ( | -(_______)_______/ )_( |/ \| v0.15 +(_______)_______/ )_( |/ \| v0.16 ``` # Gita: a command-line tool to manage multiple git repos -This tool does two things +This tool has two main features - display the status of multiple git repos such as branch, modification, commit message side by side -- (batch) delegate git commands/aliases from any working directory - -If several repos are related, it helps to see their status together. -I also hate to change directories to execute git commands. +- (batch) delegate git commands/aliases and shell commands on repos from any working directory ![gita screenshot](https://github.com/nosarthur/gita/raw/master/doc/screenshot.png) @@ -39,6 +36,9 @@ To add your own commands, see the [customization section](#custom). To run arbitrary `git` command, see the [superman mode section](#superman). To run arbitrary shell command, see the [shell mode section](#shell). +I also made a youtube video to demonstrate the common usages +[![Img alt text](https://github.com/nosarthur/gita/raw/master/doc/video-outline.png)](https://www.youtube.com/watch?v=ySWbwQcbhqI) + The branch color distinguishes 5 situations between local and remote branches: color | meaning @@ -65,7 +65,7 @@ symbol | meaning The bookkeeping sub-commands are -- `gita add `: add repo(s) to `gita` +- `gita add [-g ]`: add repo(s) to `gita`, optionally into an existing group - `gita add -a `: add repo(s) in recursively and automatically generate hierarchical groups. See the [customization section](#custom) for more details. - `gita add -b `: add bare repo(s) to `gita`. See the [customization section](#custom) for more details on setting custom worktree. @@ -79,6 +79,7 @@ The bookkeeping sub-commands are - `gita context none`: remove context - `gita color`: color sub-command - `gita color [ll]`: Show available colors and the current coloring scheme + - `gita color reset`: Reset to the default coloring scheme - `gita color set `: Use the specified color for the local-remote situation - `gita flags`: flags sub-command - `gita flags set `: add custom `flags` to repo diff --git a/doc/README_CN.md b/doc/README_CN.md index 592ad6d..23a9102 100644 --- a/doc/README_CN.md +++ b/doc/README_CN.md @@ -14,7 +14,7 @@ | | ____ | | | | | ___ | | | \_ ) | | | | | ( ) | | (___) |__) (___ | | | ) ( | -(_______)_______/ )_( |/ \| v0.15 +(_______)_______/ )_( |/ \| v0.16 ``` # Gita:一个管理多个 git 库的命令行工具 diff --git a/doc/video-outline.png b/doc/video-outline.png new file mode 100644 index 0000000..256be4a Binary files /dev/null and b/doc/video-outline.png differ diff --git a/gita/__main__.py b/gita/__main__.py index 7e5e6bd..b4057ec 100644 --- a/gita/__main__.py +++ b/gita/__main__.py @@ -59,34 +59,24 @@ def f_add(args: argparse.Namespace): repos = utils.get_repos() paths = args.paths groups = utils.get_groups() - if 0: - # add to global and tag as main - main_repos = utils.add_repos(repos, paths, repo_type='m') - # add sub-repo recursively and save to local config - for name, prop in main_repos.items(): - main_path = prop['path'] - print('Inside main repo:', name) - #sub_paths = Path(main_path).glob('**') - sub_paths = glob.glob(os.path.join(main_path,'**/'), recursive=True) - utils.add_repos({}, sub_paths, root=main_path) - else: - if args.recursive or args.auto_group: - paths = (p.rstrip(os.path.sep) for p in chain.from_iterable( - glob.glob(os.path.join(p, '**/'), recursive=True) - for p in args.paths)) - new_repos = utils.add_repos(repos, paths, is_bare=args.bare) - if new_repos and args.auto_group: - new_groups = utils.auto_group(new_repos, args.paths) - if new_groups: - print(f'Created {len(new_groups)} new group(s).') - utils.write_to_groups_file(new_groups, 'a+') - if new_repos and args.group: - gname = args.group - gname_repos = set(groups[gname]['repos']) - gname_repos.update(new_repos) - groups[gname]['repos'] = sorted(gname_repos) - print(f'Added {len(new_repos)} repos to the {gname} group') - utils.write_to_groups_file(groups, 'w') + if args.recursive or args.auto_group: + paths = (p.rstrip(os.path.sep) for p in chain.from_iterable( + glob.glob(os.path.join(p, '**/'), recursive=True) + for p in args.paths)) + new_repos = utils.add_repos(repos, paths, include_bare=args.bare, + exclude_submodule=args.skip_submodule) + if new_repos and args.auto_group: + new_groups = utils.auto_group(new_repos, args.paths) + if new_groups: + print(f'Created {len(new_groups)} new group(s).') + utils.write_to_groups_file(new_groups, 'a+') + if new_repos and args.group: + gname = args.group + gname_repos = set(groups[gname]['repos']) + gname_repos.update(new_repos) + groups[gname]['repos'] = sorted(gname_repos) + print(f'Added {len(new_repos)} repos to the {gname} group') + utils.write_to_groups_file(groups, 'w') def f_rename(args: argparse.Namespace): @@ -164,11 +154,11 @@ def f_freeze(_): seen = {''} for name, prop in repos.items(): path = prop['path'] - # TODO: What do we do with main repos? Maybe give an option to print - # their sub-repos too. url = '' - cp = subprocess.run(['git', 'remote', '-v'], cwd=path, capture_output=True) - lines = cp.stdout.decode('utf-8').split('\n') + # FIXME: capture_output is new in 3.7. Maybe drop support for 3.6 + cp = subprocess.run(['git', 'remote', '-v'], cwd=path, + universal_newlines=True, capture_output=True) + lines = cp.stdout.split('\n') if cp.returncode == 0 and len(lines) > 0: parts = lines[0].split() if len(parts)>1: @@ -402,6 +392,8 @@ def main(argv=None): p_add.add_argument('-g','--group', choices=utils.get_groups(), help="add repo(s) to the specified group") + p_add.add_argument('-s', '--skip-submodule', action='store_true', + help="skip submodule repo(s)") xgroup = p_add.add_mutually_exclusive_group() xgroup.add_argument('-r', '--recursive', action='store_true', help="recursively add repo(s) in the given path(s).") diff --git a/gita/common.py b/gita/common.py index abbef5f..e1a3dde 100644 --- a/gita/common.py +++ b/gita/common.py @@ -1,17 +1,14 @@ import os -def get_config_dir(root=None) -> str: - if root is None: - root = os.environ.get('XDG_CONFIG_HOME') or os.path.join( - os.path.expanduser('~'), '.config') - return os.path.join(root, "gita") - else: - return os.path.join(root, ".gita") +def get_config_dir() -> str: + root = os.environ.get('XDG_CONFIG_HOME') or os.path.join( + os.path.expanduser('~'), '.config') + return os.path.join(root, "gita") -def get_config_fname(fname: str, root=None) -> str: +def get_config_fname(fname: str) -> str: """ Return the file name that stores the repo locations. """ - return os.path.join(get_config_dir(root), fname) + return os.path.join(get_config_dir(), fname) diff --git a/gita/utils.py b/gita/utils.py index 2431fde..8e7d9c4 100644 --- a/gita/utils.py +++ b/gita/utils.py @@ -38,14 +38,12 @@ def get_relative_path(kid: str, parent: str) -> Union[List[str], None]: @lru_cache() -def get_repos(root=None) -> Dict[str, Dict[str, str]]: +def get_repos() -> Dict[str, Dict[str, str]]: """ Return a `dict` of repo name to repo absolute path and repo type - @param root: Use local config if set. If None, use either global or local - config depending on cwd. """ - path_file = common.get_config_fname('repos.csv', root) + path_file = common.get_config_fname('repos.csv') repos = {} if os.path.isfile(path_file) and os.stat(path_file).st_size > 0: with open(path_file) as f: @@ -54,13 +52,7 @@ def get_repos(root=None) -> Dict[str, Dict[str, str]]: repos = {r['name']: {'path': r['path'], 'type': r['type'], 'flags': r['flags'].split()} - for r in rows if is_git(r['path'], is_bare=True)} - if root is None: # detect if inside a main path - cwd = os.getcwd() - for prop in repos.values(): - path = prop['path'] - if prop['type'] == 'm' and get_relative_path(cwd, path) != MAX_INT: - return get_repos(path) + for r in rows if is_git(r['path'], include_bare=True)} return repos @@ -82,7 +74,6 @@ def get_context() -> Union[Path, None]: ctx = matches[0] if ctx.stem == 'auto': cwd = str(Path.cwd()) - repos = get_repos() # The context is set to be the group with minimal distance to cwd candidate = None min_dist = MAX_INT @@ -102,7 +93,7 @@ def get_context() -> Union[Path, None]: @lru_cache() -def get_groups() -> Dict[str, Dict]: +def get_groups() -> Dict[str, Dict[str, Union[str, List]]]: """ Return a `dict` of group name to group properties such as repo names and group path. @@ -152,7 +143,7 @@ def replace_context(old: Union[Path, None], new: str): # ctx.rename(ctx.with_stem(new_name)) # only works in py3.9 old.rename(old.with_name(f'{new}.context')) else: - open(auto.with_name(f'{new}.context'), 'w').close() + Path(auto.with_name(f'{new}.context')).write_text('') def get_choices() -> List[Union[str, None]]: @@ -170,7 +161,16 @@ def get_choices() -> List[Union[str, None]]: return choices -def is_git(path: str, is_bare=False) -> bool: +def is_submodule_repo(p: Path) -> bool: + """ + + """ + if p.is_file() and '.git/modules' in p.read_text(): + return True + return False + + +def is_git(path: str, include_bare=False, exclude_submodule=False) -> bool: """ Return True if the path is a git repo. """ @@ -178,16 +178,18 @@ def is_git(path: str, is_bare=False) -> bool: return False # An alternative is to call `git rev-parse --is-inside-work-tree` # I don't see why that one is better yet. - # For a regular git repo, .git is a folder, for a worktree repo, .git is a file. - # However, git submodule repo also has .git as a file. + # For a regular git repo, .git is a folder. For a worktree repo and + # submodule repo, .git is a file. # A more reliable way to differentiable regular and worktree repos is to # compare the result of `git rev-parse --git-dir` and # `git rev-parse --git-common-dir` loc = os.path.join(path, '.git') # TODO: we can display the worktree repos in a different font. if os.path.exists(loc): + if exclude_submodule and is_submodule_repo(Path(loc)): + return False return True - if not is_bare: + if not include_bare: return False # detect bare repo got = subprocess.run('git rev-parse --is-bare-repository'.split(), @@ -209,37 +211,26 @@ def rename_repo(repos: Dict[str, Dict[str, str]], repo: str, new_name: str): prop = repos[repo] del repos[repo] repos[new_name] = prop - # write to local config if inside a main path - main_paths = (prop['path'] for prop in repos.values() if prop['type'] == 'm') - cwd = os.getcwd() - is_local_config = True - # TODO: delete - for p in main_paths: - if get_relative_path(cwd, p) != MAX_INT: - write_to_repo_file(repos, 'w', p) - break - else: # global config - write_to_repo_file(repos, 'w') - is_local_config = False - # update groups only when outside any main repos - if is_local_config: - return + write_to_repo_file(repos, 'w') + groups = get_groups() - for g, members in groups.items(): + for g, values in groups.items(): + members = values['repos'] if repo in members: members.remove(repo) members.append(new_name) - groups[g] = sorted(members) + groups[g]['repos'] = sorted(members) write_to_groups_file(groups, 'w') -def write_to_repo_file(repos: Dict[str, Dict[str, str]], mode: str, root=None): +def write_to_repo_file(repos: Dict[str, Dict[str, str]], mode: str): """ @param repos: each repo is {name: {properties}} """ - data = [(prop['path'], name, prop['type'], ' '.join(prop['flags'])) + # The 3rd column is repo type; unused field + data = [(prop['path'], name, '', ' '.join(prop['flags'])) for name, prop in repos.items()] - fname = common.get_config_fname('repos.csv', root) + fname = common.get_config_fname('repos.csv') os.makedirs(os.path.dirname(fname), exist_ok=True) with open(fname, mode, newline='') as f: writer = csv.writer(f, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) @@ -254,7 +245,7 @@ def write_to_groups_file(groups: Dict[str, Dict], mode: str): fname = common.get_config_fname('groups.csv') os.makedirs(os.path.dirname(fname), exist_ok=True) if not groups: # all groups are deleted - open(fname, 'w').close() + Path(fname).write_text('') else: # delete the group if there are no repos for name in list(groups): @@ -285,27 +276,17 @@ def _make_name(path: str, repos: Dict[str, Dict[str, str]], return name -# TODO: delete -def _get_repo_type(path, repo_type, root) -> str: - """ - - """ - if repo_type != '': # explicitly set - return repo_type - if root is not None and os.path.normpath(root) == os.path.normpath(path): - return 'm' - return '' - - def add_repos(repos: Dict[str, Dict[str, str]], new_paths: List[str], - repo_type='', root=None, is_bare=False) -> Dict[str, Dict[str, str]]: + include_bare=False, + exclude_submodule=False, + ) -> Dict[str, Dict[str, str]]: """ Write new repo paths to file; return the added repos. @param repos: name -> path """ existing_paths = {prop['path'] for prop in repos.values()} - new_paths = {p for p in new_paths if is_git(p, is_bare)} + new_paths = {p for p in new_paths if is_git(p, include_bare, exclude_submodule)} new_paths = new_paths - existing_paths new_repos = {} if new_paths: @@ -315,12 +296,9 @@ def add_repos(repos: Dict[str, Dict[str, str]], new_paths: List[str], ) new_repos = {_make_name(path, repos, name_counts): { 'path': path, - 'type': _get_repo_type(path, repo_type, root), 'flags': '', } for path in new_paths} - # When root is not None, we could optionally set its type to 'm', i.e., - # main repo. - write_to_repo_file(new_repos, 'a+', root) + write_to_repo_file(new_repos, 'a+') else: print('No new repos found!') return new_repos @@ -442,13 +420,7 @@ def describe(repos: Dict[str, Dict[str, str]], no_colors: bool = False) -> str: for name in sorted(repos): info_items = ' '.join(f(repos[name]) for f in funcs) - if repos[name]['type'] == 'm': - # ANSI color code also takes length in Python - name = f'{info.Color.underline}{name}{info.Color.end}' - width = name_width + 8 - yield f'{name:<{width}}{info_items}' - else: - yield f'{name:<{name_width}}{info_items}' + yield f'{name:<{name_width}}{info_items}' def get_cmds_from_files() -> Dict[str, Dict[str, str]]: diff --git a/setup.py b/setup.py index 8a19666..4be31ed 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ with open('README.md', encoding='utf-8') as f: setup( name='gita', packages=['gita'], - version='0.15.8', + version='0.16.1', license='MIT', description='Manage multiple git repos with sanity', long_description=long_description, diff --git a/tests/conftest.py b/tests/conftest.py index 93576d6..b3e59ed 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -11,7 +11,6 @@ def fullpath(fname: str): PATH_FNAME = fullpath('mock_path_file') PATH_FNAME_EMPTY = fullpath('empty_path_file') PATH_FNAME_CLASH = fullpath('clash_path_file') -PATH_FNAME_MAIN = fullpath('main_path_file') GROUP_FNAME = fullpath('mock_group_file') def async_mock(): diff --git a/tests/main_path_file b/tests/main_path_file deleted file mode 100644 index 8e87ffb..0000000 --- a/tests/main_path_file +++ /dev/null @@ -1,2 +0,0 @@ -/path/to/main/,main1,m -/xxx/xx,xx, diff --git a/tests/test_main.py b/tests/test_main.py index b39ed47..3941ea9 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -9,7 +9,7 @@ import shlex from gita import __main__ from gita import utils, info, common from conftest import ( - PATH_FNAME, PATH_FNAME_EMPTY, PATH_FNAME_CLASH, GROUP_FNAME, PATH_FNAME_MAIN, + PATH_FNAME, PATH_FNAME_EMPTY, PATH_FNAME_CLASH, GROUP_FNAME, async_mock, TEST_DIR, ) @@ -115,8 +115,6 @@ class TestLsLl: (PATH_FNAME, "repo1 cmaster dsu\x1b[0m msg \nrepo2 cmaster dsu\x1b[0m msg \nxxx cmaster dsu\x1b[0m msg \n"), (PATH_FNAME_EMPTY, ""), - (PATH_FNAME_MAIN, - '\x1b[4mmain1\x1b[0m cmaster dsu\x1b[0m msg \nxx cmaster dsu\x1b[0m msg \n'), (PATH_FNAME_CLASH, "repo1 cmaster dsu\x1b[0m msg \nrepo2 cmaster dsu\x1b[0m msg \n" ), @@ -188,6 +186,7 @@ def test_clone_with_preserve_path(*_): mock_run.assert_called_once_with('repo', Path.cwd(), cmds) +@patch('os.makedirs') @patch('os.path.isfile', return_value=True) @patch('gita.common.get_config_fname', return_value='some path') @patch('gita.utils.get_repos', return_value={'repo1': {'path': '/a/', 'type': ''}, diff --git a/tests/test_utils.py b/tests/test_utils.py index 65096e9..7433532 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -176,4 +176,4 @@ def test_is_git(tmpdir): with tmpdir.as_cwd(): subprocess.run('git init --bare .'.split()) assert utils.is_git(Path.cwd()) is False - assert utils.is_git(Path.cwd(), is_bare=True) is True + assert utils.is_git(Path.cwd(), include_bare=True) is True diff --git a/work.vim b/work.vim deleted file mode 100644 index 25ad90f..0000000 --- a/work.vim +++ /dev/null @@ -1,766 +0,0 @@ -let SessionLoad = 1 -if &cp | set nocp | endif -let s:cpo_save=&cpo -set cpo&vim -inoremap (-fzf-complete-finish) l -inoremap CocRefresh =coc#_complete() -inoremap (fzf-maps-i) :call fzf#vim#maps('i', 0) -inoremap (fzf-complete-buffer-line) fzf#vim#complete#buffer_line() -inoremap (fzf-complete-line) fzf#vim#complete#line() -inoremap (fzf-complete-file-ag) fzf#vim#complete#path('ag -l -g ""') -inoremap (fzf-complete-file) fzf#vim#complete#path("find . -path '*/\.*' -prune -o -type f -print -o -type l -print | sed 's:^..::'") -inoremap (fzf-complete-path) fzf#vim#complete#path("find . -path '*/\.*' -prune -o -print | sed '1d;s:^..::'") -inoremap (fzf-complete-word) fzf#vim#complete#word() -inoremap 20_AutoPairsReturn =AutoPairsReturn() -inoremap coc#refresh() -inoremap pumvisible() ? "\" : "\" -map! * -nnoremap * *`` -nmap ,ig IndentGuidesToggle -noremap ,4 4gt -noremap ,3 3gt -noremap ,2 2gt -noremap ,1 1gt -nmap ,d :GitGutterFold -nmap ,r :Rg! -nmap ,b :Buffer -nmap ,l :Lines! -nmap ,w :BLines -nmap ,o :Files! -nmap ,f :GFiles! -nmap ,a :CtrlSF -R "" -nmap ,t :TagbarToggle -noremap , :noh :call clearmatches() -vnoremap ,s :sort -nnoremap ,s :w -noremap ,e :qa! " Quit all windows -noremap ,q :q " Quit current windows -vnoremap <  >gv -nnoremap N Nzzzv -vmap gx NetrwBrowseXVis -nmap gx NetrwBrowseX -nmap g> (swap-next) -nmap g< (swap-prev) -xmap gs (swap-interactive) -nmap gs (swap-interactive) -nmap gr (coc-references) -nmap gi (coc-implementation) -nmap gy (coc-type-definition) -nmap gd (coc-definition) -nnoremap n nzzzv -nnoremap (-fzf-complete-finish) a -nnoremap (-fzf-:) : -nnoremap (-fzf-/) / -nnoremap (-fzf-vim-do) :execute g:__fzf_command -vnoremap NetrwBrowseXVis :call netrw#BrowseXVis() -nnoremap NetrwBrowseX :call netrw#BrowseX(netrw#GX(),netrw#CheckIfRemote(netrw#GX())) -onoremap (coc-classobj-a) :call coc#rpc#request('selectSymbolRange', [v:false, '', ['Interface', 'Struct', 'Class']]) -onoremap (coc-classobj-i) :call coc#rpc#request('selectSymbolRange', [v:true, '', ['Interface', 'Struct', 'Class']]) -vnoremap (coc-classobj-a) :call coc#rpc#request('selectSymbolRange', [v:false, visualmode(), ['Interface', 'Struct', 'Class']]) -vnoremap (coc-classobj-i) :call coc#rpc#request('selectSymbolRange', [v:true, visualmode(), ['Interface', 'Struct', 'Class']]) -onoremap (coc-funcobj-a) :call coc#rpc#request('selectSymbolRange', [v:false, '', ['Method', 'Function']]) -onoremap (coc-funcobj-i) :call coc#rpc#request('selectSymbolRange', [v:true, '', ['Method', 'Function']]) -vnoremap (coc-funcobj-a) :call coc#rpc#request('selectSymbolRange', [v:false, visualmode(), ['Method', 'Function']]) -vnoremap (coc-funcobj-i) :call coc#rpc#request('selectSymbolRange', [v:true, visualmode(), ['Method', 'Function']]) -nnoremap (coc-cursors-position) :call coc#rpc#request('cursorsSelect', [bufnr('%'), 'position', 'n']) -nnoremap (coc-cursors-word) :call coc#rpc#request('cursorsSelect', [bufnr('%'), 'word', 'n']) -vnoremap (coc-cursors-range) :call coc#rpc#request('cursorsSelect', [bufnr('%'), 'range', visualmode()]) -nnoremap (coc-refactor) :call CocActionAsync('refactor') -nnoremap (coc-command-repeat) :call CocAction('repeatCommand') -nnoremap (coc-float-jump) :call coc#float#jump() -nnoremap (coc-float-hide) :call coc#float#close_all() -nnoremap (coc-fix-current) :call CocActionAsync('doQuickfix') -nnoremap (coc-openlink) :call CocActionAsync('openLink') -nnoremap (coc-references-used) :call CocActionAsync('jumpUsed') -nnoremap (coc-references) :call CocActionAsync('jumpReferences') -nnoremap (coc-type-definition) :call CocActionAsync('jumpTypeDefinition') -nnoremap (coc-implementation) :call CocActionAsync('jumpImplementation') -nnoremap (coc-declaration) :call CocActionAsync('jumpDeclaration') -nnoremap (coc-definition) :call CocActionAsync('jumpDefinition') -nnoremap (coc-diagnostic-prev-error) :call CocActionAsync('diagnosticPrevious', 'error') -nnoremap (coc-diagnostic-next-error) :call CocActionAsync('diagnosticNext', 'error') -nnoremap (coc-diagnostic-prev) :call CocActionAsync('diagnosticPrevious') -nnoremap (coc-diagnostic-next) :call CocActionAsync('diagnosticNext') -nnoremap (coc-diagnostic-info) :call CocActionAsync('diagnosticInfo') -nnoremap (coc-format) :call CocActionAsync('format') -nnoremap (coc-rename) :call CocActionAsync('rename') -nnoremap (coc-codeaction-cursor) :call CocActionAsync('codeAction', 'cursor') -nnoremap (coc-codeaction-line) :call CocActionAsync('codeAction', 'line') -nnoremap (coc-codeaction) :call CocActionAsync('codeAction', '') -vnoremap (coc-codeaction-selected) :call CocActionAsync('codeAction', visualmode()) -vnoremap (coc-format-selected) :call CocActionAsync('formatSelected', visualmode()) -nnoremap (coc-codelens-action) :call CocActionAsync('codeLensAction') -nnoremap (coc-range-select) :call CocActionAsync('rangeSelect', '', v:true) -vnoremap (coc-range-select-backward) :call CocActionAsync('rangeSelect', visualmode(), v:false) -vnoremap (coc-range-select) :call CocActionAsync('rangeSelect', visualmode(), v:true) -noremap (swap-textobject-a) :call swap#textobj#select('a') -noremap (swap-textobject-i) :call swap#textobj#select('i') -nnoremap (swap-next) :call swap#prerequisite('n', repeat([['#', '#+1']], v:count1)) g@l -nnoremap (swap-prev) :call swap#prerequisite('n', repeat([['#', '#-1']], v:count1)) g@l -xnoremap (swap-interactive) :call swap#prerequisite('x') gvg@ -nnoremap (swap-interactive) :call swap#prerequisite('n') g@l -onoremap (fzf-maps-o) :call fzf#vim#maps('o', 0) -xnoremap (fzf-maps-x) :call fzf#vim#maps('x', 0) -nnoremap (fzf-maps-n) :call fzf#vim#maps('n', 0) -tnoremap (fzf-normal)  -tnoremap (fzf-insert) i -nnoremap (fzf-normal) -nnoremap (fzf-insert) i -nnoremap CtrlSFQuickfixPrompt :CtrlSFQuickfix -nnoremap CtrlSFPrompt :CtrlSF -nnoremap GitGutterPreviewHunk :call gitgutter#utility#warn('Please change your map GitGutterPreviewHunk to (GitGutterPreviewHunk)') -nnoremap (GitGutterPreviewHunk) :GitGutterPreviewHunk -nnoremap GitGutterUndoHunk :call gitgutter#utility#warn('Please change your map GitGutterUndoHunk to (GitGutterUndoHunk)') -nnoremap (GitGutterUndoHunk) :GitGutterUndoHunk -nnoremap GitGutterStageHunk :call gitgutter#utility#warn('Please change your map GitGutterStageHunk to (GitGutterStageHunk)') -nnoremap (GitGutterStageHunk) :GitGutterStageHunk -xnoremap GitGutterStageHunk :call gitgutter#utility#warn('Please change your map GitGutterStageHunk to (GitGutterStageHunk)') -xnoremap (GitGutterStageHunk) :GitGutterStageHunk -nnoremap GitGutterPrevHunk &diff ? '[c' : ":\call gitgutter#utility#warn('Please change your map \GitGutterPrevHunk to \(GitGutterPrevHunk)')\ " -nnoremap (GitGutterPrevHunk) &diff ? '[c' : ":\execute v:count1 . 'GitGutterPrevHunk'\ " -nnoremap GitGutterNextHunk &diff ? ']c' : ":\call gitgutter#utility#warn('Please change your map \GitGutterNextHunk to \(GitGutterNextHunk)')\ " -nnoremap (GitGutterNextHunk) &diff ? ']c' : ":\execute v:count1 . 'GitGutterNextHunk'\ " -xnoremap (GitGutterTextObjectOuterVisual) :call gitgutter#hunk#text_object(0) -xnoremap (GitGutterTextObjectInnerVisual) :call gitgutter#hunk#text_object(1) -onoremap (GitGutterTextObjectOuterPending) :call gitgutter#hunk#text_object(0) -onoremap (GitGutterTextObjectInnerPending) :call gitgutter#hunk#text_object(1) -vmap "-d -vmap "*d -vmap "*y -vmap "-d"*P -nmap "*P -inoremap  complete_info()["selected"] != "-1" ? "\" : "\u\ " -inoremap ,s :w -let &cpo=s:cpo_save -unlet s:cpo_save -set autoindent -set background=dark -set backspace=2 -set clipboard=unnamed -set expandtab -set fileencodings=ucs-bom,utf-8,default,latin1 -set helplang=en -set hlsearch -set ignorecase -set laststatus=2 -set modelines=0 -set path=.,/usr/include,,,** -set runtimepath=~/.vim,~/.vim/plugged/vim-gitgutter/,~/.vim/plugged/ctrlsf.vim/,~/.vim/plugged/lightline.vim/,~/.vim/plugged/auto-pairs/,~/.vim/plugged/fzf/,~/.vim/plugged/fzf.vim/,~/.vim/plugged/goyo.vim/,~/.vim/plugged/gv.vim/,~/.vim/plugged/seoul256.vim/,~/.vim/plugged/vim-swap/,~/.vim/plugged/tagbar/,~/.vim/plugged/coc.nvim/,~/.vim/plugged/vim-fugitive/,~/.vim/plugged/vim-indent-guides/,/usr/share/vim/vimfiles,/usr/share/vim/vim82,/usr/share/vim/vimfiles/after,~/.vim/plugged/ctrlsf.vim/after,~/.vim/after -set shiftwidth=4 -set smartcase -set noswapfile -set tabline=%!lightline#tabline() -set tabstop=4 -set title -set updatetime=100 -set wildignore=*.pyc -set wildmenu -set wildmode=longest:list,full -set window=0 -set nowritebackup -let s:so_save = &so | let s:siso_save = &siso | set so=0 siso=0 -let v:this_session=expand(":p") -silent only -silent tabonly -cd ~/src/gita -if expand('%') == '' && !&modified && line('$') <= 1 && getline(1) == '' - let s:wipebuf = bufnr('%') -endif -set shortmess=aoO -argglobal -%argdel -$argadd gita/__main__.py -set stal=2 -tabnew -tabrewind -edit gita/utils.py -set splitbelow splitright -wincmd _ | wincmd | -vsplit -1wincmd h -wincmd w -set nosplitbelow -set nosplitright -wincmd t -set winminheight=0 -set winheight=1 -set winminwidth=0 -set winwidth=1 -exe 'vert 1resize ' . ((&columns * 94 + 94) / 188) -exe 'vert 2resize ' . ((&columns * 93 + 94) / 188) -argglobal -let s:cpo_save=&cpo -set cpo&vim -inoremap :call AutoPairsJump() a -inoremap AutoPairsToggle() -inoremap =AutoPairsBackInsert() -inoremap =AutoPairsFastWrap() -inoremap =AutoPairsDelete() -inoremap =AutoPairsDelete() -inoremap =AutoPairsMoveCharacter('''') -inoremap =AutoPairsMoveCharacter('"') -inoremap =AutoPairsMoveCharacter('}') -inoremap =AutoPairsMoveCharacter('{') -inoremap =AutoPairsMoveCharacter(']') -inoremap =AutoPairsMoveCharacter('[') -inoremap =AutoPairsMoveCharacter(')') -inoremap =AutoPairsMoveCharacter('(') -nmap ,hp (GitGutterPreviewHunk) -nmap ,hu (GitGutterUndoHunk) -nmap ,hs (GitGutterStageHunk) -xmap ,hs (GitGutterStageHunk) -inoremap § =AutoPairsMoveCharacter('''') -inoremap ¢ =AutoPairsMoveCharacter('"') -inoremap © =AutoPairsMoveCharacter(')') -inoremap ¨ =AutoPairsMoveCharacter('(') -inoremap î :call AutoPairsJump() a -inoremap ð AutoPairsToggle() -inoremap â =AutoPairsBackInsert() -inoremap ý =AutoPairsMoveCharacter('}') -inoremap û =AutoPairsMoveCharacter('{') -inoremap Ý =AutoPairsMoveCharacter(']') -inoremap Û =AutoPairsMoveCharacter('[') -nmap [c (GitGutterPrevHunk) -nmap ]c (GitGutterNextHunk) -xmap ac (GitGutterTextObjectOuterVisual) -omap ac (GitGutterTextObjectOuterPending) -xmap ic (GitGutterTextObjectInnerVisual) -omap ic (GitGutterTextObjectInnerPending) -noremap :call AutoPairsJump() -noremap :call AutoPairsToggle() -inoremap  =AutoPairsDelete() -inoremap  =AutoPairsFastWrap() -inoremap  =AutoPairsSpace() -inoremap " =AutoPairsInsert('"') -inoremap ' =AutoPairsInsert('''') -inoremap ( =AutoPairsInsert('(') -inoremap ) =AutoPairsInsert(')') -noremap î :call AutoPairsJump() -noremap ð :call AutoPairsToggle() -inoremap [ =AutoPairsInsert('[') -inoremap ] =AutoPairsInsert(']') -inoremap ` =AutoPairsInsert('`') -inoremap { =AutoPairsInsert('{') -inoremap } =AutoPairsInsert('}') -let &cpo=s:cpo_save -unlet s:cpo_save -setlocal autoindent -setlocal backupcopy= -setlocal nobinary -setlocal nobreakindent -setlocal breakindentopt= -setlocal bufhidden= -setlocal buflisted -setlocal buftype= -setlocal nocindent -setlocal cinkeys=0{,0},0),0],:,!^F,o,O,e -setlocal cinoptions= -setlocal cinwords=if,else,while,do,for,switch -set colorcolumn=80 -setlocal colorcolumn=80 -setlocal comments=b:#,fb:- -setlocal commentstring=#\ %s -setlocal complete=.,w,b,u,t,i -setlocal completefunc= -setlocal nocopyindent -setlocal cryptmethod= -setlocal nocursorbind -setlocal nocursorcolumn -setlocal nocursorline -setlocal cursorlineopt=both -setlocal define= -setlocal dictionary= -setlocal nodiff -setlocal equalprg= -setlocal errorformat= -setlocal expandtab -if &filetype != 'python' -setlocal filetype=python -endif -setlocal fixendofline -setlocal foldcolumn=0 -set nofoldenable -setlocal nofoldenable -setlocal foldexpr=0 -setlocal foldignore=# -setlocal foldlevel=0 -setlocal foldmarker={{{,}}} -set foldmethod=indent -setlocal foldmethod=indent -setlocal foldminlines=1 -setlocal foldnestmax=20 -setlocal foldtext=foldtext() -setlocal formatexpr= -setlocal formatoptions=tcq -setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* -setlocal formatprg= -setlocal grepprg= -setlocal iminsert=0 -setlocal imsearch=-1 -setlocal include=^\\s*\\(from\\|import\\) -setlocal includeexpr=substitute(substitute(substitute(v:fname,b:grandparent_match,b:grandparent_sub,''),b:parent_match,b:parent_sub,''),b:child_match,b:child_sub,'g') -setlocal indentexpr=GetPythonIndent(v:lnum) -setlocal indentkeys=0{,0},0),0],:,!^F,o,O,e,<:>,=elif,=except -setlocal noinfercase -setlocal iskeyword=@,48-57,_,192-255 -setlocal keywordprg=pydoc -setlocal nolinebreak -setlocal nolisp -setlocal lispwords= -setlocal nolist -setlocal makeencoding= -setlocal makeprg= -setlocal matchpairs=(:),{:},[:] -setlocal modeline -setlocal modifiable -setlocal nrformats=bin,octal,hex -set number -setlocal number -setlocal numberwidth=4 -setlocal omnifunc=pythoncomplete#Complete -setlocal path= -setlocal nopreserveindent -setlocal nopreviewwindow -setlocal quoteescape=\\ -setlocal noreadonly -setlocal norelativenumber -setlocal noscrollbind -setlocal scrolloff=-1 -setlocal shiftwidth=4 -setlocal noshortname -setlocal showbreak= -setlocal sidescrolloff=-1 -setlocal signcolumn=auto -setlocal nosmartindent -setlocal softtabstop=4 -set spell -setlocal spell -setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ -setlocal spellfile= -setlocal spelllang=en -setlocal statusline=%{lightline#link()}%#LightlineLeft_active_0#%(\ %{lightline#mode()}\ %)%{(&paste)?\"|\":\"\"}%(\ %{&paste?\"PASTE\":\"\"}\ %)%#LightlineLeft_active_0_1#%#LightlineLeft_active_1#%(\ %R\ %)%{(&readonly)&&(1||(&modified||!&modifiable))?\"|\":\"\"}%(\ %t\ %)%{(&modified||!&modifiable)?\"|\":\"\"}%(\ %M\ %)%#LightlineLeft_active_1_2#%#LightlineMiddle_active#%=%#LightlineRight_active_2_3#%#LightlineRight_active_2#%(\ %{&ff}\ %)%{1||1?\"|\":\"\"}%(\ %{&fenc!=#\"\"?&fenc:&enc}\ %)%{1?\"|\":\"\"}%(\ %{&ft!=#\"\"?&ft:\"no\ ft\"}\ %)%#LightlineRight_active_1_2#%#LightlineRight_active_1#%(\ %3p%%\ %)%#LightlineRight_active_0_1#%#LightlineRight_active_0#%(\ %3l:%-2c\ %) -setlocal suffixesadd=.py -setlocal noswapfile -setlocal synmaxcol=3000 -if &syntax != 'python' -setlocal syntax=python -endif -setlocal tabstop=8 -setlocal tagcase= -setlocal tagfunc= -setlocal tags= -setlocal termwinkey= -setlocal termwinscroll=10000 -setlocal termwinsize= -setlocal textwidth=0 -setlocal thesaurus= -setlocal noundofile -setlocal undolevels=-123456 -setlocal wincolor= -setlocal nowinfixheight -setlocal nowinfixwidth -set nowrap -setlocal nowrap -setlocal wrapmargin=0 -let s:l = 83 - ((21 * winheight(0) + 21) / 43) -if s:l < 1 | let s:l = 1 | endif -exe s:l -normal! zt -83 -normal! 05| -wincmd w -argglobal -if bufexists("gita/__main__.py") | buffer gita/__main__.py | else | edit gita/__main__.py | endif -let s:cpo_save=&cpo -set cpo&vim -inoremap :call AutoPairsJump() a -inoremap AutoPairsToggle() -inoremap =AutoPairsBackInsert() -inoremap =AutoPairsFastWrap() -inoremap =AutoPairsDelete() -inoremap =AutoPairsDelete() -inoremap =AutoPairsMoveCharacter('''') -inoremap =AutoPairsMoveCharacter('"') -inoremap =AutoPairsMoveCharacter('}') -inoremap =AutoPairsMoveCharacter('{') -inoremap =AutoPairsMoveCharacter(']') -inoremap =AutoPairsMoveCharacter('[') -inoremap =AutoPairsMoveCharacter(')') -inoremap =AutoPairsMoveCharacter('(') -nmap ,hp (GitGutterPreviewHunk) -nmap ,hu (GitGutterUndoHunk) -nmap ,hs (GitGutterStageHunk) -xmap ,hs (GitGutterStageHunk) -inoremap § =AutoPairsMoveCharacter('''') -inoremap ¢ =AutoPairsMoveCharacter('"') -inoremap © =AutoPairsMoveCharacter(')') -inoremap ¨ =AutoPairsMoveCharacter('(') -inoremap î :call AutoPairsJump() a -inoremap ð AutoPairsToggle() -inoremap â =AutoPairsBackInsert() -inoremap ý =AutoPairsMoveCharacter('}') -inoremap û =AutoPairsMoveCharacter('{') -inoremap Ý =AutoPairsMoveCharacter(']') -inoremap Û =AutoPairsMoveCharacter('[') -nmap [c (GitGutterPrevHunk) -nmap ]c (GitGutterNextHunk) -xmap ac (GitGutterTextObjectOuterVisual) -omap ac (GitGutterTextObjectOuterPending) -xmap ic (GitGutterTextObjectInnerVisual) -omap ic (GitGutterTextObjectInnerPending) -noremap :call AutoPairsJump() -noremap :call AutoPairsToggle() -inoremap  =AutoPairsDelete() -inoremap  =AutoPairsFastWrap() -inoremap  =AutoPairsSpace() -inoremap " =AutoPairsInsert('"') -inoremap ' =AutoPairsInsert('''') -inoremap ( =AutoPairsInsert('(') -inoremap ) =AutoPairsInsert(')') -noremap î :call AutoPairsJump() -noremap ð :call AutoPairsToggle() -inoremap [ =AutoPairsInsert('[') -inoremap ] =AutoPairsInsert(']') -inoremap ` =AutoPairsInsert('`') -inoremap { =AutoPairsInsert('{') -inoremap } =AutoPairsInsert('}') -let &cpo=s:cpo_save -unlet s:cpo_save -setlocal autoindent -setlocal backupcopy= -setlocal nobinary -setlocal nobreakindent -setlocal breakindentopt= -setlocal bufhidden= -setlocal buflisted -setlocal buftype= -setlocal nocindent -setlocal cinkeys=0{,0},0),0],:,!^F,o,O,e -setlocal cinoptions= -setlocal cinwords=if,else,while,do,for,switch -set colorcolumn=0 -setlocal colorcolumn=0 -setlocal comments=b:#,fb:- -setlocal commentstring=#\ %s -setlocal complete=.,w,b,u,t,i -setlocal completefunc= -setlocal nocopyindent -setlocal cryptmethod= -setlocal nocursorbind -setlocal nocursorcolumn -setlocal nocursorline -setlocal cursorlineopt=both -setlocal define= -setlocal dictionary= -setlocal nodiff -setlocal equalprg= -setlocal errorformat= -setlocal expandtab -if &filetype != 'python' -setlocal filetype=python -endif -setlocal fixendofline -setlocal foldcolumn=0 -set nofoldenable -setlocal nofoldenable -setlocal foldexpr=0 -setlocal foldignore=# -setlocal foldlevel=0 -setlocal foldmarker={{{,}}} -set foldmethod=indent -setlocal foldmethod=indent -setlocal foldminlines=1 -setlocal foldnestmax=20 -setlocal foldtext=foldtext() -setlocal formatexpr= -setlocal formatoptions=tcq -setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* -setlocal formatprg= -setlocal grepprg= -setlocal iminsert=0 -setlocal imsearch=-1 -setlocal include=^\\s*\\(from\\|import\\) -setlocal includeexpr=substitute(substitute(substitute(v:fname,b:grandparent_match,b:grandparent_sub,''),b:parent_match,b:parent_sub,''),b:child_match,b:child_sub,'g') -setlocal indentexpr=GetPythonIndent(v:lnum) -setlocal indentkeys=0{,0},0),0],:,!^F,o,O,e,<:>,=elif,=except -setlocal noinfercase -setlocal iskeyword=@,48-57,_,192-255 -setlocal keywordprg=pydoc -setlocal nolinebreak -setlocal nolisp -setlocal lispwords= -setlocal nolist -setlocal makeencoding= -setlocal makeprg= -setlocal matchpairs=(:),{:},[:] -setlocal modeline -setlocal modifiable -setlocal nrformats=bin,octal,hex -set number -setlocal number -setlocal numberwidth=4 -setlocal omnifunc=pythoncomplete#Complete -setlocal path= -setlocal nopreserveindent -setlocal nopreviewwindow -setlocal quoteescape=\\ -setlocal noreadonly -setlocal norelativenumber -setlocal noscrollbind -setlocal scrolloff=-1 -setlocal shiftwidth=4 -setlocal noshortname -setlocal showbreak= -setlocal sidescrolloff=-1 -setlocal signcolumn=auto -setlocal nosmartindent -setlocal softtabstop=4 -set spell -setlocal spell -setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ -setlocal spellfile= -setlocal spelllang=en -setlocal statusline=%{lightline#link()}%#LightlineLeft_inactive_0#%(\ %t\ %)%#LightlineLeft_inactive_0_1#%#LightlineMiddle_inactive#%=%#LightlineRight_inactive_1_2#%#LightlineRight_inactive_1#%(\ %3p%%\ %)%#LightlineRight_inactive_0_1#%#LightlineRight_inactive_0#%(\ %3l:%-2c\ %) -setlocal suffixesadd=.py -setlocal noswapfile -setlocal synmaxcol=3000 -if &syntax != 'python' -setlocal syntax=python -endif -setlocal tabstop=8 -setlocal tagcase= -setlocal tagfunc= -setlocal tags= -setlocal termwinkey= -setlocal termwinscroll=10000 -setlocal termwinsize= -setlocal textwidth=0 -setlocal thesaurus= -setlocal noundofile -setlocal undolevels=-123456 -setlocal wincolor= -setlocal nowinfixheight -setlocal nowinfixwidth -set nowrap -setlocal nowrap -setlocal wrapmargin=0 -let s:l = 34 - ((32 * winheight(0) + 21) / 43) -if s:l < 1 | let s:l = 1 | endif -exe s:l -normal! zt -34 -normal! 09| -wincmd w -exe 'vert 1resize ' . ((&columns * 94 + 94) / 188) -exe 'vert 2resize ' . ((&columns * 93 + 94) / 188) -tabnext -edit gita/common.py -set splitbelow splitright -set nosplitbelow -set nosplitright -wincmd t -set winminheight=0 -set winheight=1 -set winminwidth=0 -set winwidth=1 -argglobal -let s:cpo_save=&cpo -set cpo&vim -inoremap :call AutoPairsJump() a -inoremap AutoPairsToggle() -inoremap =AutoPairsBackInsert() -inoremap =AutoPairsFastWrap() -inoremap =AutoPairsDelete() -inoremap =AutoPairsDelete() -inoremap =AutoPairsMoveCharacter('''') -inoremap =AutoPairsMoveCharacter('"') -inoremap =AutoPairsMoveCharacter('}') -inoremap =AutoPairsMoveCharacter('{') -inoremap =AutoPairsMoveCharacter(']') -inoremap =AutoPairsMoveCharacter('[') -inoremap =AutoPairsMoveCharacter(')') -inoremap =AutoPairsMoveCharacter('(') -nmap ,hp (GitGutterPreviewHunk) -nmap ,hu (GitGutterUndoHunk) -nmap ,hs (GitGutterStageHunk) -xmap ,hs (GitGutterStageHunk) -inoremap § =AutoPairsMoveCharacter('''') -inoremap ¢ =AutoPairsMoveCharacter('"') -inoremap © =AutoPairsMoveCharacter(')') -inoremap ¨ =AutoPairsMoveCharacter('(') -inoremap î :call AutoPairsJump() a -inoremap ð AutoPairsToggle() -inoremap â =AutoPairsBackInsert() -inoremap ý =AutoPairsMoveCharacter('}') -inoremap û =AutoPairsMoveCharacter('{') -inoremap Ý =AutoPairsMoveCharacter(']') -inoremap Û =AutoPairsMoveCharacter('[') -nmap [c (GitGutterPrevHunk) -nmap ]c (GitGutterNextHunk) -xmap ac (GitGutterTextObjectOuterVisual) -omap ac (GitGutterTextObjectOuterPending) -xmap ic (GitGutterTextObjectInnerVisual) -omap ic (GitGutterTextObjectInnerPending) -noremap :call AutoPairsJump() -noremap :call AutoPairsToggle() -inoremap  =AutoPairsDelete() -inoremap  =AutoPairsFastWrap() -inoremap  =AutoPairsSpace() -inoremap " =AutoPairsInsert('"') -inoremap ' =AutoPairsInsert('''') -inoremap ( =AutoPairsInsert('(') -inoremap ) =AutoPairsInsert(')') -noremap î :call AutoPairsJump() -noremap ð :call AutoPairsToggle() -inoremap [ =AutoPairsInsert('[') -inoremap ] =AutoPairsInsert(']') -inoremap ` =AutoPairsInsert('`') -inoremap { =AutoPairsInsert('{') -inoremap } =AutoPairsInsert('}') -let &cpo=s:cpo_save -unlet s:cpo_save -setlocal autoindent -setlocal backupcopy= -setlocal nobinary -setlocal nobreakindent -setlocal breakindentopt= -setlocal bufhidden= -setlocal buflisted -setlocal buftype= -setlocal nocindent -setlocal cinkeys=0{,0},0),0],:,!^F,o,O,e -setlocal cinoptions= -setlocal cinwords=if,else,while,do,for,switch -set colorcolumn=0 -setlocal colorcolumn=0 -setlocal comments=b:#,fb:- -setlocal commentstring=#\ %s -setlocal complete=.,w,b,u,t,i -setlocal completefunc= -setlocal nocopyindent -setlocal cryptmethod= -setlocal nocursorbind -setlocal nocursorcolumn -setlocal nocursorline -setlocal cursorlineopt=both -setlocal define= -setlocal dictionary= -setlocal nodiff -setlocal equalprg= -setlocal errorformat= -setlocal expandtab -if &filetype != 'python' -setlocal filetype=python -endif -setlocal fixendofline -setlocal foldcolumn=0 -set nofoldenable -setlocal nofoldenable -setlocal foldexpr=0 -setlocal foldignore=# -setlocal foldlevel=0 -setlocal foldmarker={{{,}}} -set foldmethod=indent -setlocal foldmethod=indent -setlocal foldminlines=1 -setlocal foldnestmax=20 -setlocal foldtext=foldtext() -setlocal formatexpr= -setlocal formatoptions=tcq -setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* -setlocal formatprg= -setlocal grepprg= -setlocal iminsert=0 -setlocal imsearch=-1 -setlocal include=^\\s*\\(from\\|import\\) -setlocal includeexpr=substitute(substitute(substitute(v:fname,b:grandparent_match,b:grandparent_sub,''),b:parent_match,b:parent_sub,''),b:child_match,b:child_sub,'g') -setlocal indentexpr=GetPythonIndent(v:lnum) -setlocal indentkeys=0{,0},0),0],:,!^F,o,O,e,<:>,=elif,=except -setlocal noinfercase -setlocal iskeyword=@,48-57,_,192-255 -setlocal keywordprg=pydoc -setlocal nolinebreak -setlocal nolisp -setlocal lispwords= -setlocal nolist -setlocal makeencoding= -setlocal makeprg= -setlocal matchpairs=(:),{:},[:] -setlocal modeline -setlocal modifiable -setlocal nrformats=bin,octal,hex -set number -setlocal number -setlocal numberwidth=4 -setlocal omnifunc=pythoncomplete#Complete -setlocal path= -setlocal nopreserveindent -setlocal nopreviewwindow -setlocal quoteescape=\\ -setlocal noreadonly -setlocal norelativenumber -setlocal noscrollbind -setlocal scrolloff=-1 -setlocal shiftwidth=4 -setlocal noshortname -setlocal showbreak= -setlocal sidescrolloff=-1 -setlocal signcolumn=auto -setlocal nosmartindent -setlocal softtabstop=4 -set spell -setlocal spell -setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ -setlocal spellfile= -setlocal spelllang=en -setlocal statusline=%{lightline#link()}%#LightlineLeft_active_0#%(\ %{lightline#mode()}\ %)%{(&paste)?\"|\":\"\"}%(\ %{&paste?\"PASTE\":\"\"}\ %)%#LightlineLeft_active_0_1#%#LightlineLeft_active_1#%(\ %R\ %)%{(&readonly)&&(1||(&modified||!&modifiable))?\"|\":\"\"}%(\ %t\ %)%{(&modified||!&modifiable)?\"|\":\"\"}%(\ %M\ %)%#LightlineLeft_active_1_2#%#LightlineMiddle_active#%=%#LightlineRight_active_2_3#%#LightlineRight_active_2#%(\ %{&ff}\ %)%{1||1?\"|\":\"\"}%(\ %{&fenc!=#\"\"?&fenc:&enc}\ %)%{1?\"|\":\"\"}%(\ %{&ft!=#\"\"?&ft:\"no\ ft\"}\ %)%#LightlineRight_active_1_2#%#LightlineRight_active_1#%(\ %3p%%\ %)%#LightlineRight_active_0_1#%#LightlineRight_active_0#%(\ %3l:%-2c\ %) -setlocal suffixesadd=.py -setlocal noswapfile -setlocal synmaxcol=3000 -if &syntax != 'python' -setlocal syntax=python -endif -setlocal tabstop=8 -setlocal tagcase= -setlocal tagfunc= -setlocal tags= -setlocal termwinkey= -setlocal termwinscroll=10000 -setlocal termwinsize= -setlocal textwidth=0 -setlocal thesaurus= -setlocal noundofile -setlocal undolevels=-123456 -setlocal wincolor= -setlocal nowinfixheight -setlocal nowinfixwidth -set nowrap -setlocal nowrap -setlocal wrapmargin=0 -let s:l = 2 - ((1 * winheight(0) + 21) / 43) -if s:l < 1 | let s:l = 1 | endif -exe s:l -normal! zt -2 -normal! 0 -tabnext 1 -set stal=1 -badd +34 gita/__main__.py -badd +0 gita/utils.py -badd +0 gita/common.py -if exists('s:wipebuf') && len(win_findbuf(s:wipebuf)) == 0 - silent exe 'bwipe ' . s:wipebuf -endif -unlet! s:wipebuf -set winheight=1 winwidth=20 shortmess=filnxtToOS -set winminheight=1 winminwidth=1 -let s:sx = expand(":p:r")."x.vim" -if filereadable(s:sx) - exe "source " . fnameescape(s:sx) -endif -let &so = s:so_save | let &siso = s:siso_save -nohlsearch -doautoall SessionLoadPost -unlet SessionLoad -" vim: set ft=vim : -- cgit v1.2.3