无与伦比的“。在点文件中 - 点文件中的”的功能是什么?

Unmatched ". in dotfile - what is the function of " in dotfiles?

我最近 运行 在尝试从 Vim 中删除突出显示时进入 this answer,因为不小心按了 # 键。我按照用户的代码在我的 .vimrc 文件的底部输入了这个:

" <Ctrl-l> redraws the screen and removes any search highlighting.
nnoremap <silent> <C-l> :nohl<CR><C-l>

我退出了Vim,运行source vimrc

并返回以下错误:

Unmatched ".

所以我认为这意味着双引号需要在行尾相应的句号,就像用户所做的那样。但是我正在查看我的 .vimrc 和 none of the "s have matching fullstops. 事实上,当我删除我插入的行并尝试 运行 source vimrc,它仍然返回 Unmatched ". 错误。这是一个示例:

" main
syntax enable
set encoding=utf-8
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
set smarttab
set number
set showcmd
set bs=2                                        " use backspace in INSERT mode
"set nomodeline                                  " turn off modeline parsing

还有一个:

" split nav
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>

我这里的问题是我不明白这里的"的作用,谷歌或者搜索以前的SO问题都没有找到任何信息。它似乎像评论一样使用,但我以为 # 用于注释。我是一个完整的 Linux 初学者 - 我不知道修复点文件的正确语法是什么,如果它需要修复的话。

所以我的问题是双重的:

  1. 我该如何解决这个问题?我是否应该遍历整个点文件并在以 "?

    开头的每一行末尾添加句号
  2. " 到底有什么作用?

我相信我正在使用 TCSH。

编辑: 这是点文件:

" main
syntax enable
set encoding=utf-8
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
set smarttab
set number
set showcmd
set bs=2                                        " use backspace in INSERT mode
"set nomodeline                                  " turn off modeline parsing
set cursorline
set autoindent
filetype indent on
filetype on
filetype plugin on
set wildmenu                                    " autocomplete menu
set lazyredraw                                  " redraw only when necessary
set showmatch                                   " highlight matching parentheses
set smartcase
set incsearch                                   " search as char entered
set hlsearch                                    " highlight search matches
nnoremap #<space> :nohlsearch<CR>               " #<space> turn off search hl
set foldenable                                  " enable folding
set foldlevelstart=10                           " open most folds be default
set foldnestmax=10                              " 10 nested fold max
nnoremap <space> za                             " space open/closes fold
set foldmethod=indent                           " fold based on indent level
nnoremap j gj                                   " move down visually
nnoremap k gk                                   " move up visually
nnoremap gV `[v`]                               " highlight latest - ins mode


" status line that shows more information than the default one
" set statusline=%F%m%r%h%w\ [FMT=%{&ff}]\ [T=%Y]\ [HEX=\%02.2B]\ [POS=%04l,%04v\ (%p%%)]\ [lines=%L]
" set laststatus=2

" split
set splitbelow
set splitright

" split nav
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>

您似乎将 shell 点文件与您的 .vimrc 混淆了。 Shell 来源 shell 点文件,而 vim 来源 vimrc。 Shell 不理解 vimrc 表示法,特别是 " 为 vim 引入了注释,而它在 shell 中开始了一个双引号单词。 shell 期望双引号成对出现,这就是为什么你得到 Unmatched ".

换句话说,不要告诉 shell 到 source .vimrc,只需启动 vim 它会自动为您提供 $HOME/.vimrc,因为该功能内置于 vim.

如果您在 vim 中更改 .vimrc(为什么要使用其他编辑器?)那么您可以在不退出 vim 的情况下通过键入 :source ~/.vimrc 和使更改生效。