Vi & Vim

使用vi和Vim系列文本编辑器的人员的问答


1
为什么光标移到<Esc>之后的行的开头?
我注意到在插入模式下沿.txt文件中的一行进行编辑时,光标将在使用键序列进行写操作后移至该行的开头: &lt;esc&gt;:w 我想更改此行为,以使光标在:write之后将保持在原位。这可能吗?我不需要光标保持在插入模式,我只希望它在写入后保持其最后位置。 我在Windows上使用gVim 7.4。我的.vimrc非常基本,我不相信任何设置都会干扰此行为。我还从我的.vimrc中删除了mswin.vim和example.vim的采购(与正式的vim.org Windows安装程序捆绑在一起)。 阅读下面的评论后,我再次查看了该问题,并意识到在写入完全由尾部空白组成的行之后,光标仅滑至最左侧。换句话说,当该行是一个悬挂缩进时,除了空格之外,没有其他任何字符时,光标只会滑动到esc-:w的最左侧。.vimrc正在使用以下设置处理缩进行为: set tabstop=4 set softtabstop=4 set shiftwidth=4 set expandtab set autoindent 因此,在缩进线下方创建的新行将包含4个尾随空白,作为该行的前4个空格(我要保留)。按下“ esc”键时,光标将滑动到缓冲区的最左端。 在尾随空白(如缩进)组成的一行上,单击“ esc”以返回正常模式时,是否可以保留光标位置?

2
如何自动折叠功能?
有没有一种方法可以根据函数声明的语法来制作Vim折叠函数? 例如,让vim打开如下函数: def foobar(foo,bar): if foo &gt; bar: print "foo" elif foo &lt; bar: print "bar" elif foo == bar: print "foobar" 变成这个: +----- 7 lines: def foobar(foo,bar): ------------------------------------------------------------- 我可以在.vimrc文件中使用一些命令或函数来完成此操作吗?
12 folding 


2
您如何找到最后分配变量的位置?
我正在尝试设置g:netrw_list_hide,但似乎不起作用。无论我将其设置为什么,.vimrc它始终具有价值,^\.\.\=/\=$。仅当我vimrc再次获取文件时,它才具有正确的值。 我该如何调试?我猜有一些插件正在设置该变量?可能在vimrc加载后,所以我想看看它的设置位置。

1
使cnext和cprevious循环回到开始
如果我:cnext已经在快速修复列表的末尾运行,我会收到错误消息 E553: No more items 并没有任何反应。取而代之的是,当我输入:cnext列表的末尾时,我希望vim循环回到第一个quickfix条目。是否可以为此行为配置vim?
12 quickfix 

1
在Vimscript中获取当前的窗口/缓冲区/标签页
在python中,使用vim模块时,获取当前的window / buffer / tabpage非常简单: current_win = vim.current.window current_buff = vim.current.buffer current_tabpage = vim.current.tabpage 我的问题是,如何在纯VimL / Vimscript中执行此操作,并返回哪种类型的对象?我真的似乎在windows.txt(:h windows)的任何地方都找不到它。

1
如何记录我的键盘输入以进行统计?
我想找出我在编码过程中最常用的模式是什么。因此,我正在寻找一种在vim中记录所有键盘输入的方法,最好使用时间戳记。然后,我可以对最近使用的模式/动作进行一些分析,以了解动作将花费什么时间,并找出要优化的内容。 在Vim中有惯用的方法吗?我可以尝试为此编写一个插件吗?这样做会对性能产生什么影响? 谢谢
12 vimrc 


1
在同一台计算机上使用vim和咖啡因
背景 我在研究实验室工作,每天使用三种不同的操作系统。在Windows和Mac机器上,当我在另一台机器上工作时,我利用Caffeine阻止这些机器启用屏幕保护程序(Linux没有此问题)。当我切换回原位时必须再次登录非常烦人。 问题 当vim或gvim处于插入模式时,该字符&lt;F15&gt;偶尔出现在文档中。经过一些研究,我将其追溯到咖啡因。Caffeine的网站指出,该软件通过偶尔模拟&lt;F15&gt;按键事件来运行: 在所有可用的按键中,F15可能是侵入性最低的(我从未见过使用该按键的PC键盘!),并且极不可能干扰您的工作。 因此,咖啡因显然是罪魁祸首。但是,我仍然更喜欢在所有三台计算机上使用我最喜欢的文本编辑器,并且不打算为了适应Caffeine而对其进行更改。 题 我可以放些东西vimrc使vim忽略&lt;F15&gt;按键事件吗? 编辑清晰度 我无法禁用屏幕保护程序超时;它是由IT部门出于安全目的设置的。因此,使用Caffeine解决方法时,为了保持合规性,当我离开办公桌时,必须手动锁定计算机。还不错 但是每隔几分钟解锁一次。 另外,我没有编写Caffeine,所以不知道为什么开发人员选择&lt;F15&gt;每分钟单击一次。正如@ Random832所建议的那样,我可能会略有不同,可能只需轻轻一点鼠标移动或触摸板轻敲即可。

3
如何在不进入插入模式的情况下替换多个字符
我有一个带有以下内容的行的文件: foofoo.xy.barbar 我想将更xy改为gh。我尝试做2r-&gt; gh,但是显然不起作用,因为它替换为xy,gg然后将光标向左移动一个位置。 有没有一种方法可以在不进入插入模式或不使用更多击键的情况下进行此操作(例如:s/xy/gh/)?

3
WSL上的Vim:同步系统剪贴板吗?(设置剪贴板^ =未命名)?
在使用WSL /猛砸对于Windows我希望能够使用y yy 3y并p以同样的方式,他们总是在vim的工作,而是连接到所有的应用程序共享系统剪贴板,而不是Vim的内部剪贴板......我已经有同上管理剪贴板历史。 看来Vim已经有一个内置选项,可以将复制/粘贴缓冲区与系统剪贴板同步...但是,运行WSL时的问题是您实际上需要使用它/mnt/c/Windows/System32/clip.exe来访问剪贴板...因此,即使我想能够使用: set clipboard^=unnamed 它似乎还没有WSL支持。 我知道neovim确实有这个选项,但是我现在真的不想尝试neovim ... 目前,与我发现的解决方法最接近的是: nnoremap &lt;silent&gt; &lt;leader&gt;y :call system('/mnt/c/Windows/System32/clip.exe', @0)&lt;CR&gt; vnoremap &lt;silent&gt; &lt;leader&gt;y :call system('/mnt/c/Windows/System32/clip.exe', @0)&lt;CR&gt; 但是在我看来,这是一个非常可怕的解决方案...它使复制过程分为两个步骤... 当然,我可以使用mouse / shift + ins进行一些复制和粘贴,但是我认为必须有一种方法可以使这种同步在Vim中正常工作。

1
Vim全局替换不能代替一行中的所有匹配项
有时,我的全局专长不能替代一行中的所有匹配项。通过以下事实证实了这一点:当我进行确认替换时,可以看到它,在具有多个可能匹配项的行中找到一个匹配项,但随后转到另一行。 我使用g或gc参数对整个文件进行操作%。 在此文件上: hello hello hello hello hello hello hello 如果%s/hello/goodbye/g我知道 goodbye hello goodbye goodbye hello hello goodbye .vimrc关于搜索/替换,我只有 set hlsearch set ignorecase set incsearch
12 substitute 

2
如何记录嵌套宏?
我想在宏中记录一个宏,如下所示: qa [ first macro ... ] qb [ second macro ... ] q [ some more stuff, involving @b ... ] q 但是,第二个q解释为停止第一个宏的请求,其余解释为命令。 有什么方法可以开始在宏中记录第二个宏吗? 如果不是,是否还有其他方法可以在宏中进行某些特定的击键重复操作来达到预期效果?
11 macro 

1
如果不是endif oneliner
我的内胆里有这个,vimrc但它不起作用: if has("patch-7.4.710") | set listchars+=space:· else | set listchars+=trail:· | endif VIM说: E518: Unknown option: else 你能帮助我吗 ?
11 vimscript 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.