Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim 如何使用不同的选项卡/空间设置打开单个文件或项目_Vim_Macvim - Fatal编程技术网

Vim 如何使用不同的选项卡/空间设置打开单个文件或项目

Vim 如何使用不同的选项卡/空间设置打开单个文件或项目,vim,macvim,Vim,Macvim,我在我的项目中使用(Mac)Vim,设置为使用2个空格作为选项卡,甚至有一个脚本可以在保存时将所有选项卡转换为2个空格 但是,当我与其他开发人员一起工作时,有时他们使用制表符而不是空格,我正在寻找一种快速切换两种不同vim配置的方法,我希望在命令行上切换它们,如下所示 macvim --oh-no-not-tabs-again . 这方面的最佳做法是什么?我知道这可能有点宗教色彩,但标签更容易处理,因为您可以设置标签间距。当有人设置空格而不是制表符时,它就被卡住了,喜欢制表符的人必须进行各种疯

我在我的项目中使用(Mac)Vim,设置为使用2个空格作为选项卡,甚至有一个脚本可以在保存时将所有选项卡转换为2个空格

但是,当我与其他开发人员一起工作时,有时他们使用制表符而不是空格,我正在寻找一种快速切换两种不同vim配置的方法,我希望在命令行上切换它们,如下所示

macvim --oh-no-not-tabs-again .

这方面的最佳做法是什么?

我知道这可能有点宗教色彩,但标签更容易处理,因为您可以设置标签间距。当有人设置空格而不是制表符时,它就被卡住了,喜欢制表符的人必须进行各种疯狂的转换才能再次正确

如果希望制表符为2个字符,则在vimrc中:

set ts=2
set sw=2

此外,您不应该需要脚本来进行转换。只需使用
set expandtab
,当您输入制表符时,它会自动执行此操作。

我知道这可能有点宗教色彩,但制表符更容易处理,因为您可以设置它们的间距。当有人设置空格而不是制表符时,它就被卡住了,喜欢制表符的人必须进行各种疯狂的转换才能再次正确

如果希望制表符为2个字符,则在vimrc中:

set ts=2
set sw=2

此外,您不应该需要脚本来进行转换。只需使用
set expandtab
,当您输入制表符时,它会自动执行此操作。

您可以在每个目录的基础上触发自动命令,因此您可以在不使用热键的情况下自动配置任何需要的内容。以下是我的想法:

" set up global defaults, these are mine
set tabstop=4
set softtabstop=4
set shiftwidth=4
set smarttab
set expandtab
set autoindent
set smartindent

" override tab settings on a per-directory basis
function! SetStandardTabs()
  set noexpandtab
  set tabstop=8
  set softtabstop=4
endfunction

augroup PerDirectoryTabs
  autocmd!
  autocmd BufRead,BufEnter,BufNewFile /path/to/csharp/files/* call SetStandardTabs()
augroup END
这将vim配置为自动判断您何时处于/path/to/csharp/文件的子树中,并按照您想要的方式设置缓冲区局部变量。把它放在你的vimrc里,你就可以走了

编辑这里有一些代码放在.vimrc中,它在树上搜索最近的“local”.vimrc并将其加载。小心使用!不要设置全局或做任何“有趣”的事情,你将很难诊断行为。我还没有完全测试过它。它可能会吃掉你的孩子。你被警告了

" per-subtree .vimrc
function! FindAndSourceLocalVimrc()
  if exists('g:inFindLocalVimrc')
    return
  endif
  let g:inFindLocalVimrc=1

  let v = findfile('.vimrc', '.;')
  if exists('v')
    let v = fnamemodify(v, ':p')
    if v != $MYVIMRC
      exe "source " . v
    endif
  endif

  unlet g:inFindLocalVimrc
endfunction

call FindAndSourceLocalVimrc()

我相信10年后,我会找到一些已经存在的内置方法,在一行中完成这项工作。

您可以在每个目录的基础上启动自动命令,这样您就可以在不使用热键的情况下自动配置任何需要的内容。以下是我的想法:

" set up global defaults, these are mine
set tabstop=4
set softtabstop=4
set shiftwidth=4
set smarttab
set expandtab
set autoindent
set smartindent

" override tab settings on a per-directory basis
function! SetStandardTabs()
  set noexpandtab
  set tabstop=8
  set softtabstop=4
endfunction

augroup PerDirectoryTabs
  autocmd!
  autocmd BufRead,BufEnter,BufNewFile /path/to/csharp/files/* call SetStandardTabs()
augroup END
这将vim配置为自动判断您何时处于/path/to/csharp/文件的子树中,并按照您想要的方式设置缓冲区局部变量。把它放在你的vimrc里,你就可以走了

编辑这里有一些代码放在.vimrc中,它在树上搜索最近的“local”.vimrc并将其加载。小心使用!不要设置全局或做任何“有趣”的事情,你将很难诊断行为。我还没有完全测试过它。它可能会吃掉你的孩子。你被警告了

" per-subtree .vimrc
function! FindAndSourceLocalVimrc()
  if exists('g:inFindLocalVimrc')
    return
  endif
  let g:inFindLocalVimrc=1

  let v = findfile('.vimrc', '.;')
  if exists('v')
    let v = fnamemodify(v, ':p')
    if v != $MYVIMRC
      exe "source " . v
    endif
  endif

  unlet g:inFindLocalVimrc
endfunction

call FindAndSourceLocalVimrc()

我相信10年后,我会找到一些已经存在的内置方法来在一行中完成这项工作。

几年前,我用C开发了一个实用程序,名为。它分析文本文件的前几千行,然后发出Vim命令来设置该文件的
:shiftwidth
:expandtab
:tabstop
设置。它面向看起来像C的语言。
autotab
知道缩进是通过空格实现的,还是通过制表符和空格的组合实现的

程序中的注释头给出了将其集成到Vim中的说明,以便在加载文件时自动调用它


Autotab的速度很快,因为它是用C编写的,并且只依赖于标准库,因此启动开销很低,并且限制了从文件中读取的行数。在每次文件加载时调用它所带来的额外延迟几乎不明显。

几年前,我用C开发了一个名为。它分析文本文件的前几千行,然后发出Vim命令来设置该文件的
:shiftwidth
:expandtab
:tabstop
设置。它面向看起来像C的语言。
autotab
知道缩进是通过空格实现的,还是通过制表符和空格的组合实现的

程序中的注释头给出了将其集成到Vim中的说明,以便在加载文件时自动调用它


Autotab的速度很快,因为它是用C编写的,并且只依赖于标准库,因此启动开销很低,并且限制了从文件中读取的行数。在每次文件加载时调用它所带来的额外延迟几乎不明显。

根据您的环境,有不同的方法来实现这一点。当您与其他开发人员合作时,对于给定的目录树,选项卡样式通常都是相同的,还是您必须逐个文件地考虑它?它是基于目录树的,基本上是一个具有特定设置的整个项目。在我的例子中,所有C#代码都带有标签,所有其他与web相关的脚本(Ruby、Javascript)都在空格中。根据您的环境,有不同的方法来实现这一点。当您与其他开发人员合作时,对于给定的目录树,选项卡样式通常都是相同的,还是您必须逐个文件地考虑它?它是基于目录树的,基本上是一个具有特定设置的整个项目。在我的例子中,所有C#代码都带有制表符,所有其他与web相关的脚本(Ruby、Javascript)都在空格中。我知道vimrc的设置,但我需要能够快速切换,我更希望能够使用命令行参数切换。在空格/制表符上:我通常遵循社区推荐的风格,在与web相关的脚本语言(Ruby、Coffeescript、Javascript)中总是空格,在C风格的语言中是制表符。我知道vimrc的设置,但我需要能够快速