人们谈论常见技巧的问题很多,特别是“Vim+ctags提示和技巧”。

然而,我并没有提到Vim新手会觉得很酷的常用快捷方式。我所说的是一位经验丰富的Unix用户(无论是开发人员、管理员,还是两者都有),他们认为自己知道99%的人从未听说过或梦想过的东西。这不仅让他们的工作更容易,而且很酷,很粗糙。毕竟,Vim位于世界上最黑暗的角落丰富的操作系统中,因此它应该具有只有少数特权人士知道并想与我们分享的复杂性。


当前回答

由于延迟和缺少颜色(我喜欢颜色方案:),我不喜欢在PuTTY的远程机器上编程。所以我开发了这个技巧来解决这个问题。我在Windows上使用它。

你需要

1次gVim远程和本地计算机上的1x rsync1x SSH私钥身份验证到远程计算机,因此您不需要键入密码1x寻呼机1个PuTTY

设置远程计算机

配置rsync以使您的工作目录可访问。我使用SSH隧道,只允许来自该隧道的连接:

address = 127.0.0.1
hosts allow = 127.0.0.1
port = 40000
use chroot = false
[bledge_ce]
    path = /home/xplasil/divine/bledge_ce
    read only = false

然后启动rsyncd:rsync--daemon--config=rsyncd.conf

设置本地计算机

从Cygwin安装rsync。启动Pageant并加载远程计算机的私钥。如果您正在使用SSH调谐,请启动PuTTY来创建隧道。在工作目录中创建一个批处理文件push.bat,它将使用rsync将更改的文件上载到远程计算机:

rsync --blocking-io *.cc *.h SConstruct rsync://localhost:40001/bledge_ce

SConstruct是scons的构建文件。修改文件列表以满足您的需要。如果不使用SSH调谐,请将localhost替换为远程计算机的名称。

配置Vim这现在很容易。我们将使用快速修复功能(:make and error list),但编译将在远程计算机上运行。所以我们需要设置makeprg:

set makeprg=push\ &&\ plink\ -batch\ xplasil@anna.fi.muni.cz\ \"cd\ /home/xplasil/divine/bledge_ce\ &&\ scons\ -j\ 2\"

这将首先启动push.bat任务以上载文件,然后使用SSH(来自PuTTY套件的Plink)在远程计算机上执行命令。该命令首先将目录更改为工作目录,然后启动构建(我使用scons)。

构建结果将方便地显示在本地gVim错误列表中。

其他回答

能够在基于客户端/服务器的模式下运行Vim。

例如,假设您正在处理一个项目,其中有大量缓冲区、选项卡和其他信息保存在名为session.vim的会话文件中。

通过发出以下命令,可以打开会话并创建服务器:

vim --servername SAMPLESERVER -S session.vim

请注意,如果要创建服务器,可以打开常规文本文件,而不一定是会话。

现在,假设您在另一个终端中,需要打开另一个文件。如果您通过以下方式定期打开:

vim new_file.txt

您的文件将在单独的Vim缓冲区中打开,这很难与会话中的文件进行交互。要在服务器上的新选项卡中打开new_file.txt,请使用以下命令:

vim --servername SAMPLESERVER --remote-tab-silent new_file.txt

如果没有服务器正在运行,则将像打开常规文件一样打开此文件。

由于每次您想运行这些标志时都提供这些标志是非常乏味的,因此您可以创建一个单独的别名来创建客户端和服务器。

我在bashrc文件中放置了以下内容:

alias vims='vim --servername SAMPLESERVER'
alias vimc='vim --servername SAMPLESERVER --remote-tab-silent'

您可以在以下位置找到有关此的更多信息:http://vimdoc.sourceforge.net/htmldoc/remote.html

我的一些必备品是:

cscope+ctags+vim,可以在网上找到。

一些用于快速启动新代码文件的缩写,例如:

ab cpph #include <iostream><CR>#include <string><CR>#include <cstdlib><CR>#include <cassert><CR>#include <vector><CR>#include <
stdexcept><CR>using namespace std;<CR>int main(int argc, char *argv[]) {
ab perlh #!/usr/bin/perl<CR>use strict;<CR>use warnings;<CR>
ab chdr #include <stdio.h><CR>#include <sys/types.h><CR>#include <unistd.h><CR>#include <stdlib.h><CR>#include <sys/stat.h><CR>
#include <sys/wait.h><CR>#include <string.h><CR>int main(int argc, char *argv[]) {
ab xhtmlhdr <?xml version="1.0" encoding="UTF-8"?><CR><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.o
rg/TR/xhtml1/DTD/xhtml1-strict.dtd"><CR><html xmlns="http://www.w3.org/1999/xhtml"><CR>  <head><CR>  <title></title><CR><link h
ref="style.css" rel="STYLESHEET" type="text/css"><CR></head>

例如,cpph将插入main.cc文件的基本框架

还有我的功能键映射:

map <F1> <Esc>:w<CR>:perl $e = `./error.pl`; my ($f,$l,@w) = split(":",$e); my $w=join(":",@w); $curwin->Cursor($l,0); VIM::Msg($w);<CR>
map <F2> :wincmd w<CR>
map <F3> :wincmd s<CR>
map <F4> :wincmd v<CR>
map <F5> :wincmd o<CR>
map <F6> :sball<CR>
map <F7> :wq<CR>
map <F8> :wincmd q<CR>
map <F9> :wincmd -<CR>
map <F10> :wincmd +<CR>
map <F11> :wincmd <<CR>
map <F12> :wincmd ><CR>

在这种情况下,我的F1被映射为将光标放在下一个需要进行源代码迁移的错误上。

map _ ebi"^[ea"^[

此映射将使_引用一个字符串

gg=G

更正了整个文件的缩进。我错过了Eclipse中值得信赖的<C-a><C-I>,但我发现vim处理得很好。

:sp%:h-目录列表/文件选择器,使用当前文件的目录

(属于rampion的cd提示下的评论,但我还没有评论权限)

:设置本地自动读取

自动重新加载当前缓冲区。。在查看日志文件时特别有用,它几乎可以从vim中为unix中的“tail”程序提供功能。

从vim中检查编译错误。根据perl语言设置makeprg变量

:setlocal makeprg=perl\-c\%

对于PHP

设置makeprg=php\-l\%设置错误格式=%m\\%f\\line\%l

发出“:make”将运行相关的makeprg,并在快速修复窗口中显示编译错误/警告,并可以轻松导航到相应的行号。